我正在尝试制作一组基本程序,其中一个程序要求用户提供一组值,该值将程序写入文件中,而另一个程序从该文件中读取值并将它们打印到屏幕上。这是我的代码:
阅读程序如下:
当我运行两个程序时,第一个程序成功写入“ 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;”的情况下替换它。>
如何解决此重复问题?
答案 0 :(得分:0)
看起来很正常。读完最后一行后,尚未读完最后一个字符(用于表示输入终止的“ 0”),因此feof(fp)返回0,程序再次进入循环。>
答案 1 :(得分:0)
出现明显重复的行的原因是feof()
的行为。 man说
feof()函数测试stream指向的流的文件结尾指示符,如果设置为非零,则返回非零值。
含义,feof()
测试是否已设置EOF标志。到达文件末尾,但不能 over ,不会设置该标志。因此,执行了另一个迭代,该迭代设置了EOF标志,而没有更改变量值,给人以重复的印象。
您可以更改逻辑并使用{{1}},也可以将程序更改为类似的内容
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("%5d\t%8d\t$ %9.2f\n", pn, quantity, price);
}
} while ( !eof );