我在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仔细检查了文件,没有找到空白行。为什么我要阅读这条不存在的路线?
答案 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.