首页 文章

value既不是数组也不是指针

提问于
浏览
1

我有这个代码:

int ID [STUDENTS];
int Scores [STUDENTS][GRADES];
int Hi [GRADES];
int Lo [GRADES];
double Avg [GRADES];
int numStudents;

/*getData function called*/
int getData(ID, Scores,  numStudents)
{
  int student_count;
  int quiz_count;

  FILE* spIn;


  spIn = fopen("myfile.dat", "r");
  student_count=0;
  while (fscanf (spIn, "%d", ID[student_count]) != EOF)
  {
     for (quiz_count = 0; quiz_count < GRADES; quiz_count++)
     {
        fscanf (spIn, "%d", Scores[student_count][quiz_count]);
     }
  }
}

我一直在 Headers 行中得到错误: while(fscanf (spIn, "%d", ID[student_count]) !=EOF)fscanf (spIn, "%d", Scores[student_count][quiz_count]);

请帮忙,我不知道该怎么办!

2 回答

  • 1

    问题在于变量 IDScores 的范围 . 两个变量都在两个地方定义 -

    • 作为文件顶部的全局变量,和

    • 作为函数的命名参数 .

    命名参数的范围更接近使用地点,因此它获胜 .

    看起来第二位的使用(即作为函数参数)不是故意的,因为声明缺少类型* . 删除它们将使您的代码编译 .

    *在这种情况下C认为它们是 int ,并发出一个警告,该错误应该向您解释错误:由于编译器认为内部范围 IDScoreint ,因此您不能使用索引运算符 [] .

  • 2

    fscanf()的两个实例都不正确 . fscanf()需要指针而不是整数来修改该位置的内存 .

    你的第一个电话是:

    while (fscanf (spIn, "%d", ID[student_count]) != EOF)
    

    索引变量 ID 时,您将 student_count 索引的值传递给函数 . 哪个fscanf()试图将其解释为内存位置(不好)!

    这个:

    while (fscanf (spIn, "%d", &ID[student_count]) != EOF)
    

    将索引 student_count 处的数组引用传递给fscanf() .

    对fscanf()的另一个调用也是如此!

相关问题