C--程序没有正确读取文件末尾
C--Program not reading end of file correctly
我正在尝试制作一组基本程序,其中一个程序要求用户提供一组值,程序将这些值写入文件,另一个程序从文件中读取值并将它们打印到屏幕。这是我的代码:
阅读程序如下:
当我 运行 两个程序时,第一个成功写入 "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 是如何工作的,我不知道如何在不使用 [=22= 的情况下替换它]
我该如何解决这个重复问题?
看起来很正常。当读到最后一行时,最后一个字符(你用来表示输入结束的“0”)还没有读到,所以feof(fp) returns 0,程序再次进入循环时间.
明显重复行背后的原因是 feof()
行为。 man 说
The function feof() tests the end-of-file indicator for the stream pointed to by stream, returning nonzero if it is set.
意思是,feof()
测试是否设置了 EOF 标志。到达文件末尾,但不是 over,不会设置标志。因此执行另一次迭代,设置 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("%5d\t%8d\t$ %9.2f\n", 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("%5d\t%8d\t$ %9.2f\n", pn, quantity, price);
}
我正在尝试制作一组基本程序,其中一个程序要求用户提供一组值,程序将这些值写入文件,另一个程序从文件中读取值并将它们打印到屏幕。这是我的代码:
阅读程序如下:
当我 运行 两个程序时,第一个成功写入 "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 是如何工作的,我不知道如何在不使用 [=22= 的情况下替换它]
我该如何解决这个重复问题?
看起来很正常。当读到最后一行时,最后一个字符(你用来表示输入结束的“0”)还没有读到,所以feof(fp) returns 0,程序再次进入循环时间.
明显重复行背后的原因是 feof()
行为。 man 说
The function feof() tests the end-of-file indicator for the stream pointed to by stream, returning nonzero if it is set.
意思是,feof()
测试是否设置了 EOF 标志。到达文件末尾,但不是 over,不会设置标志。因此执行另一次迭代,设置 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("%5d\t%8d\t$ %9.2f\n", 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("%5d\t%8d\t$ %9.2f\n", pn, quantity, price);
}