fscanf读取文件中不存在的行

时间:2011-11-05 11:43:41

标签: c scanf

我在Fedora 15计算机上,我有一个看起来像这样的简单代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x[50], y[50];
    int i;
    FILE *f_in = fopen("readtest.dat","r");

    if (f_in == NULL) printf("No file...\n");
    else
    {
        i = 0;
        while (!feof(f_in))
        {
            fscanf(f_in,"%d %d",&x[i],&y[i]);
            printf("%d %d\n", x[i], y[i]);
            i++;
        }
        printf("I've read %d data.\n", i);
    }
return 0;
}

要读取的文件是

1   1
2   2
3   3
4   4
5   5

但我不知道为什么输出看起来像这样。

1   1
2   2
3   3
4   4
5   5
1250259108 1250140145
I've read 6 data.

我原以为我在文件中留下了一个空白的新行,但我没有。我用gedit和vim仔细检查了文件,没有找到空白行。为什么我要阅读这条不存在的路线?

3 个答案:

答案 0 :(得分:3)

可能最后一次调用fscanf函数失败。

  

这些函数返回分配的输入项数。这个可以   如果匹配,则少于提供的数量,甚至为零   故障。

打印前检查其返回值。类似的东西:

v = fscanf(f_in,"%d %d",&x[i],&y[i]);
if (v) {
    // printf goes here
}

答案 1 :(得分:3)

正如user786653在他的评论中所说(至少参考),“while!feof”是用错误的方式来读取C中的文件.ofof在你发现之前不会返回true点击文件的末尾,实际上试图读过去。所以你的程序会进行额外的读取,但是失败了。

答案 2 :(得分:0)

您应在fscanf

中添加新的换行符
fscanf(f_in,"%d %d\n",&x[i],&y[i]);

也不要忘记fclose你的文件

编辑

我试了一下,这是结果。

没有\n

1 1
2 2
3 3
4 4
5 5
-1216418984 1
I've read 6 data.

使用\n

1 1
2 2
3 3
4 4
5 5
I've read 5 data.