gpt4 book ai didi

c - EOF 读取最后一行两次

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:46 24 4
gpt4 key购买 nike

我是 C 的新手,有一个非常简单的函数可以在这里显示文件内容。它工作正常,除了我的文件的最后一行打印两次......我知道它必须使用 EOF 但我无法弄清楚如何获得将 EOF 识别为最后一行并且不再运行一次的函数.我知道互联网上有十亿个地方有类似的问题,但很多都是针对 C++ 的,因为我是新手,所以我认为最好只使用我自己的代码。这是代码:

 {
int count=0, fileEnd=0;

FILE* rockPtr=fopen("rockact.txt", "r");

printf("\n%8s%8s%8s%8s%8s\n", "BANDID", "NAME", "SIZE", "CREW", "TRANS");

do
{
fileEnd=fscanf(rockPtr, "%d%s%d%d%s", &(tempBand.rockid), tempBand.bandname, &(tempBand.bandsize), &(tempBand.crewsize), tempBand.transport);
if (fileEnd !=EOF); //checks EOF has not been reached
{
printf("\n%8d%8s%8d%8d%8s", tempBand.rockid, tempBand.bandname, tempBand.bandsize, tempBand.crewsize, tempBand.transport);
count++;
}
}
while (fileEnd !=EOF);

fclose(rockPtr);
printf("\n The total amount of rock acts on file is %d\n", count);
}

最佳答案

您的 if 条件不需要分号:

  if (fileEnd !=EOF); // This semicolon is wrong!

分号是空语句,是 if 的主体。

我宁愿将整个循环转换为 while 循环:

while (fscanf(rockPtr, "%d%s%d%d%s", &tempBand.rockid, tempBand.bandname,
&tempBand.bandsize, &tempBand.crewsize, tempBand.transport)) == 5)
{
printf("\n%8d%8s%8d%8d%8s", tempBand.rockid, tempBand.bandname,
tempBand.bandsize, tempBand.crewsize, tempBand.transport);
count++;
}

如果你想担心它,你可以在循环后找出 EOF、读取错误和格式错误之间的区别。请注意,检查是所有值都已正确转换。

关于c - EOF 读取最后一行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433980/

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