【问题标题】:C, passing a pointer for a file into a a function as an argumentC,将文件的指针作为参数传递给函数
【发布时间】:2014-10-12 14:49:53
【问题描述】:

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

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

LA1.c:19:10:错误:未知类型名称“文件” 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);

}

【问题讨论】:

  • 您是否尝试过将#include 语句放在顶部?

标签: c file function pointers


【解决方案1】:

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

【讨论】:

  • 这是有道理的。谢谢你。我通常以这种方式格式化我的代码,直到现在我还没有偏离。我认为我没有充分的理由,但由于这是我第一次犯错误,所以我以前没有看到过错误。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2013-01-25
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多