2011-03-26 43 views
4

我对C非常陌生,我一直在看关于数组和函数的教程,并且我开始了一个项目。在函数原型和数组中使用C

我有一个程序,我正在对下面显示的,现在,我只是想让用户输入由ctlr Z终止的x和y值。问题是我仍然不明白如何关联功能EnterValues主要内部和外部()。注意功能EnterValues里面有数组。

这个程序没有完成,因为我还在为它添加东西。输出是空的我明白这一点,因为在main()中除了int i,j; int值;我想输出什么是什么void EnterValues(float dataarray [] [MAXDATACOL])

#include "stdafx.h" 
#include "stdio.h" 

#define MAXDATACOL 5 

int main(void) { 
    void EnterValues(int dataarray[][MAXDATACOL]); 
    int i,j; 
    int values; 
    while(1); 
} 

void EnterValues(float dataarray[][MAXDATACOL]) { 
    for (;;) { 
     int k = 0, g = 0; 
     printf("enter the x and y values terminated by ctrl Z\n"); 
     printf("[%d][%d]:",k++,g++); 
     if (scanf("%f%f",&dataarray[k],&dataarray[g]) == EOF) 
      break; 
    } 
} 
+1

您可以谈谈您使用此代码试图完成的任务吗? – 2011-03-26 19:57:30

+0

你想要走得太快吗? **建议**:不要混合2个新的主题(数组和功能),直到你分开理解它们。 – pmg 2011-03-26 20:06:32

+1

你会希望两个原型匹配。一个使用int而另一个使用float。我倾向于将main放在文件的底部,所以你不需要重复EnterValues的声明。 – 2011-03-26 20:11:04

回答

0

你应该在main函数之前编写函数原型。

void EnterValues(float dataarray[][MAXDATACOL]);int main(void) 

好运:)

+0

这是更好的风格,是的:) – pmg 2011-03-26 20:09:31

1

首先,你使用它之前,你应该申报的功能。因此,在主要之前放入EnterValues函数声明。其次,我猜想数据阵列是你想从“EnterValues”函数中检索的值。

您应该修改代码,

void EnterValues(float **dataarray, int *col_num); 

int main(void) 
{ 
    int i,j; 
    float dataarray[MAXDATACOL][2]; 
    int col_num; 

    EnterValues((float **)&dataarray, &col_num); 
} 

我希望你知道指针的概念。祝你好运!

0

void EnterValues(float dataarray[][MAXDATACOL]);是一个函数原型,这意味着它是用来告诉编译器有一个功能,某处声明(在这种情况下,在相同的C文件),称为EnterValues,它返回一个float dataarray[][MAXDATACOL]作为参数,并且什么也没有返回(void)函数原型没有在任何函数内部声明,而是在外部声明,并且必须先声明才能使用该函数。否则编译器在你调用这个函数时不会知道你的意思。

当您调用函数时,发生在某个其他函数内部(在这种情况下,您希望从main调用EnterValues),您没有提及它接收/返回的类型。你只需服从函数的声明(原型),给它输入正确类型的参数,并将它的返回值赋给正确类型的变量。

例如:

/* This is the prototype of our function multiply */ 
int multiply(int arg1, int arg2); 

/* This is the main function which will use multiply */ 
int main() 
{ 
    int a = 4; 
    int b = 3; 
    int sum; 
    /* here we call the function, we don't write the types it gets, but obeying the prototype */ 
    sum = multiply(a, b); 
    return 0; 
} 

/* This is the implementation of the function multiply */ 
int multiply(int arg1, int arg2) 
{ 
    return arg1 * arg2; 
} 

当我看到在你的代码很多错误,我建议你读的书C编程语言这不完全是新的,但非常非常光明的。 (请参阅this question