使用多个文件打印字符串

时间:2018-05-07 23:33:57

标签: c

我是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;
}

由于我花了一些时间试图弄清楚这个,我想我是否有任何关于如何不打印两次最后一个条目的提示。 谢谢!

1 个答案:

答案 0 :(得分:0)

在第一个fread()添加

之后
if (feof(fp))
{
    break;
}

第一个fread会触发文件结束,因此pn无法更改。然后第二个fread再次触发文件结束,q也无法更改。然后第3个fread再次触发eof,p保持不变。 printf将再次显示旧值。