Бесконечный цикл при печати в файле - PullRequest
0 голосов
/ 16 марта 2019

Нас попросили сохранить значения из одного файла в другой.(Чтение его из исходного текстового файла и копирование его в другой текстовый файл) Я получил правильный синтаксис, но каким-то образом у моей программы возникла логическая ошибка при печати во втором файле (бесконечный цикл, поэтому он не будет выполняться вследующий цикл while.) Продукт этой программы получает только последний введенный набор информации, и цикл никогда не заканчивается.

Вот моя программа:

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 голосов
/ 16 марта 2019

Joven,

Я думаю, что ваша проблема заключается в scanf(" %c",&ans);, попробуйте удалить пространство перед "% c"

Лучшее, что вы должны сделать, - это поместить какой-то вывод вконец ваших циклов для отладки, у вас есть много циклов, в конце каждого цикла делайте что-то вроде printf("\nwhile loop id: 1, seq: %d\n", loop_count) у вас также есть кое-что, что происходит с вашими fclose и fopens, доступ к файлам занимает немного времени, этобыстрее открыть файл, когда он вам нужен, а затем закрыть его, когда вы закончите ... Если вам нужно одновременно читать и записывать файл, используйте fopen (filename, "rw").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...