【发布时间】:2015-07-17 06:31:12
【问题描述】:
我正在编写一个 C 代码来从文本文件中读取浮点数。文本文件如下所示:
202.75 47.22 141.20
202.75 47.22 -303.96
202.75 47.22 -301.67
202.75 47.22 482.42
...
这个文件有19973行,读取文本文件的C代码sn-p是
nLinesToRead = 19973;
x = (float *)calloc(nLinesToRead, sizeof(float));
y = (float *)calloc(nLinesToRead, sizeof(float));
z = (float *)calloc(nLinesToRead, sizeof(float));
ptr = fopen(fileName, "r");
for(i=0; i<nLinesToRead; i++) {
status = fscanf(ptr, "%f%f%f", &x[i], &y[i], &z[i]);
if(feof(ptr) && i<nLinesToRead)
printf("\nERROR: encountered unexpected EOF in line %d", i+1);
if(status != 3) {
printf("\nERROR: Error reading valid pixels from the disk at line %d with status %d and %d\n", i+1, status, feof(ptr));
printf("\nEOF is %d\n", EOF);
exit(FAILURE);
}
}
这段代码的输出是
ERROR: encountered unexpected EOF in line 19940
ERROR: encountered unexpected EOF in line 19941
ERROR: Error reading valid pixels from the disk at line 19941 with status -1 and 0
表示 fscanf 在意外位置遇到 EOF。查看第 19939 到 19942 行
202.21 47.23 -453.42
202.21 47.23 -445.81
202.21 47.23 -419.89
202.21 47.41 179.25
我没有看到任何奇怪的地方。
有人遇到过这种情况吗?
【问题讨论】:
-
这是一个愚蠢的问题,但你确定有这么多行吗?
-
是的... wc -l 给出 19973
-
您是否看到每次都在同一个位置发生这种情况。另外,如果您不介意,请将您的输入文件发布到我可以获取的地方。
-
你
#include <stdlib.h>了吗? -
不相关,你能想到什么可能的条件会导致
if(feof(ptr) && i<nLinesToRead)的后半部分永远标记 false ,特别是因为 for 循环本身的条件会一开始就阻止进入?