在此代码段中,我尝试计算文件中包含的行数。数据分为七列和421行。但是,总输出次数返回为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);
答案 0 :(得分:1)
问题是,您需要在尝试feof
后立即执行fscanf
检查,但在增加行计数器之前。否则,您将为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);
当然,你也可以像马丁·詹姆斯建议的那样做,并从结果中减去一个。
答案 1 :(得分:0)
不要循环while (!feof(...))
,它将无法正常工作,因为在您尝试从文件末尾读取之后才会设置EOF标志。而是使用例如while (fscanf(...) == 7)
(在您的具体情况下)。
使用while (!feof(...))
的问题在于它会将循环到多次,这正是您遇到的问题。