C,将文件的指针作为参数传递给函数

时间:2014-10-12 14:49:54

标签: c file function pointers

我正在创建一个函数来对txt文件中的数据进行排序,以便生成其中的数据的最小值,平均值和最大值。

我想在多个文件上重用该功能。因此,我想将文件指针作为参数传递给函数。但是,我的编译器给出了以下错误:

LA1.c:19:10:错误:未知类型名称'FILE'  void mmm(FILE * ifile,int * i,int * min,int * max,float * mu);

我已在下面附上我的代码。请排除一些无关紧要的变量,因为我预计会使用这些变量,但尚未完成此程序的大部分内容。任何帮助表示赞赏。

提前致谢。

/* Purpose: (1) Sort Data from 5 different years (2) Calculate Standard Deviation */
/* (3) find max & min from each set (4) calculate deviation standard deviation  */
/*  units, AKA σ (5) convert to letter grade */
/*************************************************************************/


/* Outline: (A) funct: scan data ifile (main) calc mean (μ), max, min  */
/* (B) funct: rescan data and calc sigma (C) main: Rescan data, calc Δ μετα' σ and letter */   
/* grade each for each datum.  (D) Print to minitor in main.  Use dow while?loop for rows*/
/*************************************************************************/

/*prototypes*/

void mmm(FILE *ifile, int *i, int *min, int *max, float *mu);   
/* mmm stands for min, max, mean */

float sigma (int *num, float *sigma);       /*calculates sigma(standard deviation) */

/* libraries */

#include <stdio.h>
#include <math.h>

void main (void) {

/* main variable declarations max of i vars used for rows loop counter in main */


float sigma, mu;
int i, i09, i10, i11, i12, i13, min, max, f09max, f09min, f10max, f10min, f11max, 
f11min, f12max, f12min, f13max, f13min;     

FILE *ifile;

ifile=fopen("2009.txt", "r");


mmm(&ifile, &i, &min, &max, &mu);

fclose(ifile);  /* file must be closed to rescan in other functions */

}

void mmm(FILE *ifile, int *i, int *min, int *max, float *mu) {

printf("running function mean \n");

int sum, num;

*max=0; /* Score range is between 0 and 100 in a class, thus use of fixed initials */
*min=100;
*i=0;
num=0;
sum=0;

    while (fscanf(ifile, "%i", &num) !=EOF)  {

    printf("Variable num is %i. \n", num);

    fscanf(ifile, "%d", &num);

        if (num>*max) {*max=num;} /* assigns global max and min */
        if (num<*min) {*min=num;} /* to be stored to different years in funct main*/

    *i=*i+1;

    sum= sum + num; /* sums for average calculation */

    }

*mu= ((float)sum/(*i));

printf("The min is %i.  The max is %i.\n", *min, *max);
printf("i is %i, sum is %i, and mu is %f \n", *i, sum, *mu);

}

3 个答案:

答案 0 :(得分:2)

您在#include <stdio.h>行之前声明了您的函数,因此编译器还没有看到FILE类型的定义。只需将#include行移到文件顶部即可。

答案 1 :(得分:1)

在C语言中,所有内容的声明都需要在使用之前进行。由于您在使用FILE的函数原型之后包含了FILE声明的头文件,因此编译器将不知道FILE是什么,因为到那时为止(在功能宣言中)它还没有看到这个声明。

答案 2 :(得分:0)

&#39; #include&#39; C语句是预处理程序指令。预处理器是C编译器在源代码上调用的程序,它遵循这些指令中给出的命令,并在编译之前对文件进行文本操作。当它看到`#include&#39;语句,它抓取这些文件并将它们插入到您的代码中。通过将这些指令放在函数原型之后,您将使那些其他源文件中定义的所有类型仅对遵循这些指令的程序部分可见。因此,基本上,将这样的预处理程序指令放在程序的最顶层,以使它们可以被所有代码使用。