我是C的新手,在这里有一个非常简单的显示文件内容的功能。它工作正常,除了我的文件的最后一行打印两次...我知道它必须做W / 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);
}
答案 0 :(得分:4)
您的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,读取错误和格式错误之间的区别。请注意,检查是所有值都已转换为OK。
答案 1 :(得分:1)