私はCにかなり慣れていないので、ここにファイルの内容を表示するための非常に単純な関数を持っています. ファイルの最後の行が2回印刷されることを除いて、正常に動作します...EOFを使用する必要があることは知っていますが、関数がEOFを最後の行として認識し、もう一度実行しないようにする方法がわかりません. インターネット上には同様の問題を抱えた場所が 10 億あることは知っていますが、多くは 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);
}