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

尽管fscanf不是EOF,但循环结束,c,while-loop,return,eof,scanf,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

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

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

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)
我一直在论坛和man 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从文件的最后一行开始读取。任何帮助都将不胜感激。

如果您在
cmp
的赋值周围加上括号,将该表达式与EOF进行比较,会发生什么情况?您的输出格式与您的代码不匹配(大写、是否有单词
state
,等等),这会让人怀疑该代码是否生成了该输出。1。你的父母错了;您正在为
cmp
指定布尔值。2.您是否阅读了
fscanf
的文档?@Scott Hunter抱歉,这是以前的版本。。。现在编辑它。@Ed S。fscanf的手册页上说它“…返回分配的输入项目数。在匹配失败的情况下,该值可以小于规定值,甚至为零。零表示虽然有可用的输入,但未分配任何转换;通常这是由于输入字符无效,例如用于“%d”转换的字母字符。我想这意味着如果我在调用fscanf时寻找5个值,它将返回5。在一次特定的运行中,它也返回了16???请告诉我哪里出了问题,因为我对整个C环境非常陌生。