C——程序未正确读取文件末尾



我正在尝试制作一组基本程序,其中一个程序向用户请求一组值,该程序将这些值写入文件,另一个程序从文件中读取值并将其打印到屏幕上。这是我的代码:

读取程序如下:

当我运行这两个程序时,第一个程序成功地写入"inventory.txt",但读取函数会复制最后一组值。它看起来像这样:

Please enter item data (part number, quantity, price): 3, 1, 3.0
Please enter item data (part number, quantity, price): 0
Below are the items in your inventory.
Part#   Quantity    Item Price
3          1    $      3.00
3          1    $      3.00

我相信问题出在我的while(feof(fp(==0(上,但我不太明白feof是如何工作的,我也不知道如何在不使用"break;"的情况下替换它

如何解决此重复问题?

明显重复行背后的原因是feof()行为。男子说

函数feof((测试流指向的流的文件结尾指示符,如果设置了该指示符,则返回非零。

意思是,feof()测试EOF标志是否已设置。到达文件末尾,但不是超过,不会设置标志。因此,执行另一次迭代,设置EOF标志,而不更改变量值,给人一种重复的印象。

您可以更改逻辑并使用fgets(),也可以将程序更改为类似的程序

int eof;
do {  
eof = fread(&pn, sizeof(int), 1, fp) < 1;
if ( !eof ) {
fread(&quantity, sizeof(int), 1, fp);
fread(&price, sizeof(float), 1, fp);
printf("%5dt%8dt$ %9.2fn", pn, quantity, price);
}
} while ( !eof );

或者,较轻的

while ( 1 ) {  
if ( fread(&pn, sizeof(int), 1, fp) < 1 ) break;
fread(&quantity, sizeof(int), 1, fp);
fread(&price, sizeof(float), 1, fp);
printf("%5dt%8dt$ %9.2fn", pn, quantity, price);
}

看起来很正常。读取最后一行时,尚未读取最后一个字符(用于表示输入终止的"0"(,因此feof(fp(返回0,程序再次进入循环。

相关内容

  • 没有找到相关文章

最新更新