计算数据文件中的行

时间:2014-04-23 09:26:09

标签: c feof

在此代码段中,我尝试计算文件中包含的行数。数据分为七列和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);

2 个答案:

答案 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(...))的问题在于它会将循环到多次,这正是您遇到的问题。