尽管fscanf不是EOF,但循环结束

时间:2015-05-04 15:02:37

标签: c while-loop return eof scanf

这是我的第一个问题,我希望这是一个明智的问题。在这里:

我使用一个非常简单的循环来读取文件中的值:

int i=0;
int cmp;
FILE *file = fopen(file_name,"rb");

while (cmp = fscanf(file,"%f %f %f %f %f", &Gr[i], &dr[i], &eta[i], &tau[i], &v[i]) != EOF)
{
    printf("Prop=%0.4f %0.4f %0.4f %0.4f %0.4f\n%i\n%i\n", Gr[i], dr[i], eta[i], tau[i], v[i], EOF, cmp);
    i++;
}
printf("EOF=%i,File state=%i\n",cmp, EOF);

fclose(file)

我一直在论坛周围搜索关于函数返回值的信息和fscanf,我发现fscanf返回成功匹配值的数量。然而,当循环执行时,cmp的值等于1,而不是5.我使用的样本文件只有4行5列,所以当i = 3时,while正确结束,但是当我打印时cmp的值为0而不是-1,这是EOF的所谓值。我正在尝试这个简单的片段,试图真正了解正在发生的事情。 附加代码的输出是:

Prop=-5.1300 1.1424 0.4855 1.4277 0.0578
EOF=-1,File state=1

Prop=-6.3712 1.0744 0.4082 1.3579 0.1188
EOF=-1,File state=1

Prop=-4.9538 1.4177 0.3038 1.1513 0.1428
EOF=-1,File state=1

Prop=-6.4335 1.6539 0.0863 1.8511 0.0741
EOF=-1,File state=1

File state=0, EOF=-1

问题起源于更大的代码,由于某种原因,fscanf开始从文件的最后一行开始读取。任何帮助将不胜感激。

0 个答案:

没有答案