我之前问过一个不同的问题,但我对这个问题的基础很差,所以我创建了一个新问题,因为我问的是一个完全不同的问题。
我有一个函数可以读取文本文件中的给定行(由 ac 变量给出)。它执行该行的读取,然后检查该行是否是文件中的最后一行。如果是这样,它会增加一个值。
问题是即使它不是文件的实际结尾,它也会增加值。我想我用错了 feof 但我没有运气让它工作:
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;
}
根据要求提供示例数据,这是我可以使用的文本文件:
1 1 30
2 2 5
3 1 1
fscanf 正确分配值。在第二行, feof 返回 true 并增加了 terminate。feof 在第 3 行再次返回 true 并再次终止增量。