【发布时间】:2013-05-19 08:10:50
【问题描述】:
我有一个函数应该读取文件并检测文件何时结束。
该函数当前仅读取倒数第二行并结束。谁能告诉我我做错了什么,因为我自己看不到:
int readIn(TinCan* inCan, int toggle)
{
int ii, isFinished = 0;
char fullName[20];
sprintf(fullName, "Label_%d.txt", inCan->pid);
FILE* fp;
fp = fopen(fullName, "r");
if(fp==NULL)
{
printf("Error: could not open %s\n", fullName);
}
else
{
for (ii=0; ii < ((inCan->ac)-1); ii++)
{
fscanf(fp, "%*d %*d %*d\n"); /*move through lines without scanning*/
}
fscanf(fp,"%d %d %d", &inCan->ac, &inCan->state, &inCan->time);
}
if (feof(fp) && (toggle == 1))
{
printf("File ended");
writeLog(inCan);
isFinished = 1;
terminated++;
}
fclose(fp);
return finished;
}
【问题讨论】:
-
您希望它如何检测文件是否已结束?您基于
incan->ac-1执行一系列 fscanf 调用,然后再调用一个,然后调用 feof。那将如何找到文件的结尾?它会告诉你你是否在最后,但它不会以某种方式读取数据,直到 eof,是吗?也许我错过了什么。 -
你为什么不给我们最小的输入文件来重现这个文件,以及你从这个程序得到的输出与你期望的输出相比?
-
最后一行有
'\n'吗?所以你应该把最后一行作为空行。否则fscanf("...\n");不会将值适当地放入变量中。 -
请勿重复发帖。