文件中打印的无限循环

时间:2019-03-16 00:40:52

标签: c

我们被要求将值从一个文件存储到另一个文件。 (从源txt文件读取并将其复制到另一个txt文件)我的语法正确无误,但不知何故,我的程序在第二个文件中打印时出现了逻辑错误(无限循环,因此为什么它不会在该程序的结果是仅获取最后输入的信息,并且循环永无止境。

这是我的程序:

char ans;
FILE *fp,*fp2;
fp = fopen("INVENTORY.txt","w");
do{
    printf("Date (mm/dd/yy): ");
    scanf("%d %d %d", &inv.dt.m, &inv.dt.d, &inv.dt.yr);
    printf("Part No.: ");
    scanf("%d", &inv.pno);
    printf("Price: ");
    scanf("%f", &inv.price);
    printf("Quantity On Hand: ");
    scanf("%d", &inv.qty);
    printf("Reorder Parts: ");
    scanf("%d", &inv.rp);
    printf("Monthly Order: ");
    scanf("%d", &inv.mo);
    if(inv.qty < inv.rp)
        inv.oa = (inv.rp + inv.mo) - inv.qty;
    else
        inv.oa = 0;
    fprintf(fp,"%d/%d/%d\t%d\t%.2f\t%d\t%d\t%d\t%.2f\n", inv.dt.m, inv.dt.d, inv.dt.yr, inv.pno, inv.price, inv.qty, inv.rp, inv.mo, inv.oa);
    printf("Add another (Y/N)? ");
    scanf(" %c",&ans);
    printf("\n");
}while(ans == 'Y' || ans == 'y');
fclose(fp);
fp = fopen("INVENTORY.txt", "r");
fp2 = fopen("REPORT.txt", "w");

while(fscanf(fp,"%d/%d/%d\t%d\t%.2f\t%d\t%d\t%d\t%.2f\n", &inv.dt.m, &inv.dt.d, &inv.dt.yr, &inv.pno, &inv.price, &inv.qty, &inv.rp, &inv.mo, &inv.oa)!=EOF){
    fprintf(fp2,"%d\t%.2f\t%d\t%d\t%d\t%.2f\n", inv.pno, inv.price, inv.qty, inv.rp, inv.mo, inv.oa);
}

fclose(fp);
fclose(fp2);
fp2 = fopen("REPORT.txt","r");
printf("Part No.\tPrice\tQuantity On Hand\tReorder Parts\tMonthly Order\tOrder Amount");

while(fscanf(fp2,"%d\t%.2f\t%d\t%d\t%d\t%.2f\n", &inv.pno, &inv.price, &inv.qty, &inv.rp, &inv.mo, &inv.oa)!=EOF){
    printf("%d\t%.2f\t%d\t%d\t%d\t%.2f",inv.pno, inv.price, inv.qty, inv.rp, inv.mo, inv.oa);
}
fclose(fp2);
return 0;

我希望有人可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

Joven,

我认为您的问题出在scanf(" %c",&ans);上,请尝试删除“%c”前面的空格

最好的做法是将一些输出放在调试循环的末尾,您会有很多循环,在每个循环的末尾执行类似printf("\nwhile loop id: 1, seq: %d\n", loop_count)的操作,随fclose和fopens发生的事情,存取文件只需要一点时间,您可以在需要时打开文件,然后在完成后将其关闭...如果需要读取和写入文件,则更快文件同时使用fopen(文件名,“ rw”)。