在这个代码片段中,我试图计算文件中包含的行数。数据被划分为7列和421行。然而,outmput的总数返回为422,这在多行中计数。为什么?我该如何避免这个问题?
我知道在(!Feof(inStr))时使用指令是错误的,但有人明确要求我使用它。
int valid = 0;
[...]
while(!feof(inStr)){
fscanf(inStr," %c %f %f %f %f %f %d",&app1, &app2, &app3, &app4, &app5, &app6,&app7);
valid++;
}
printf("%d",valid);
问题是,在尝试fscanf
之后,但在增加行计数器之前,需要立即执行feof
检查。否则,您将为eof
递增它。
while(1){
fscanf(inStr," %c %f %f %f %f %f %d",&app1, &app2, &app3, &app4, &app5, &app6,&app7);
if (feof(inStr)) break;
valid++;
}
printf("%d",valid);
当然,你也可以按照马丁·詹姆斯的建议,从结果中减去一。
不要循环while (!feof(...))
,它不会像您预期的那样工作,因为EOF标志直到您尝试从文件末尾以外读取之后才会设置。相反,请使用例如while (fscanf(...) == 7)
(在您的特定情况下)。
使用while (!feof(...))
的问题是,它将循环一次到多次,这正是您遇到的问题。