我是C编程的新手,所以请耐心等待。我被分配了一个项目,在该项目中,用户被提示输入零件号,数量和价格"当用户输入" 0"程序结束,信息保存在文本文件中。编译一个单独的程序,然后打印出用户输入的内容。这是第一个程序(save_inventory.c)提示用户的内容。
This program stores a business inventory.
Please enter item data (part number, quantity, price): *3, 1, 2.4*
Please enter item data (part number, quantity, price): *1, 4, 3.0*
Please enter item data (part number, quantity, price): *0*
Thank you. Inventory stored in file inventory.txt.
以下是第二个程序(display_inventory.c)应该输出的内容:
Below are the items in your inventory:
Part# Quantity Item Price
3 1 $ 2.40
1 4 $ 3.00
2 4 $ 1.30
我的代码到目前为止工作,唯一的问题是当我使用display_inventory.c程序时,输入的最后一行打印两次。所以2,4,$ 1.30再次出现。以下是两个程序的代码:
save_inventory.c:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pn, q;
float p;
FILE *fp = fopen("inventory.txt", "wb");
printf("This program stores a business inventory.\n");
for(;;)
{
printf("Please enter item data (part number, quantity, price): ");
scanf("%d, ", &pn);
if(pn == 0){break ;}
scanf("%d, %f", &q, &p);
fwrite(&pn , sizeof(pn) ,1, fp);
fwrite(&q , sizeof(q),1 , fp);
fwrite(&p, sizeof(p) , 1,fp);
}
printf("Thank you. Inventory stored in file inventory.txt.\n");
fclose(fp);
return 0;
}
这是display_inventory.c:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pn, q;
float p;
FILE *fp = fopen("inventory.txt", "rb");
printf("Part#\t Quantity\t Item Price");
for(;!feof(fp);)
{
fread(&pn , sizeof(pn) ,1, fp);
fread(&q , sizeof(q),1 , fp);
fread(&p, sizeof(p) , 1,fp);
printf("\n%5d\t %8d \t $%9.2f\n",pn,q,p);
}
fclose(fp);
return 0;
}
由于我花了一些时间试图弄清楚这个,我想我是否有任何关于如何不打印两次最后一个条目的提示。 谢谢!
答案 0 :(得分:0)
在第一个fread()
添加
if (feof(fp))
{
break;
}
第一个fread
会触发文件结束,因此pn
无法更改。然后第二个fread
再次触发文件结束,q
也无法更改。然后第3个fread
再次触发eof,p
保持不变。 printf
将再次显示旧值。