gpt4 book ai didi

c - feof 检测错误的文件结尾

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:37 26 4
gpt4 key购买 nike

我之前问过一个不同的问题,但我对这个问题的看法有点偏题,所以我提出了一个新问题,因为我问的是一个完全不同的问题。

我有一个函数可以读取文本文件中的给定行(由 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 并且 terminated 递增。 feof 在第 3 行再次返回 true 并且增量第二次终止。

最佳答案

feof() 不检测文件是否结束。它检测最后一次读取错误是否是由于文件已结束。

feof() 仅在读取失败后发生。

因此,首先读取数据并检查返回值。如果读取失败,请使用 feof() 确保读取失败是因为已到达 END-OF-FILE(读取失败的其他原因是某种错误(网络故障、坏扇区、打印机着火了,...),可以用 ferror() 检测到。

关于c - feof 检测错误的文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com