#c
Вопрос:
У меня возникла проблема с последней частью задания. Я хочу обновить(изменить) конкретное значение в текстовом файле, но эта программа перестает работать из оператора if в цикле while. Я пытался решить эту проблему, но не смог ее решить. Пожалуйста, помогите.
int Equant() { DisplayList(); FILE * fpr_r = fopen("donation.txt", "r"); FILE * fpr_w = fopen("Edonation.txt", "w"); if (fpr_r == NULL || fpr_w == NULL) { printf ("An able to open the file for writing"); exit(1); } int Inumber, v=0; double NQuant, NVQuant; struct Donate Esearch; printf ("nEnter the ID you want to change the quantity: "); scanf ("%d", amp;Inumber); while (fread(amp;Esearch, sizeof(struct Donate),1,fpr_r)) { fscanf (fpr_r,"%d %s %s %s %d %lf,", amp;Esearch.IDd, amp;Esearch.supply, amp;Esearch.Scode, amp;Esearch.Cdonator, amp;Esearch.Nship, amp;Esearch.QuantityR); if (Esearch.IDd == Inumber) { printf ("ID: %d Name of Supply: %s, Supply Code: %s, Donator: %s, No. of Shipment: %d, Quantity Received (Million): %lfn", Esearch.IDd, Esearch.supply, Esearch.Scode, Esearch.Cdonator, Esearch.Nship, Esearch.QuantityR); printf ("nEnter the new Quantity value: "); scanf ("%lf", amp;NVQuant); Esearch.QuantityR = NVQuant; } fwrite (amp;Esearch, sizeof(struct Donate),1,fpr_w); } fclose(fpr_r); fclose(fpr_w); if (!v) { printf ("No line founded.n"); }
Комментарии:
1. Вы смешиваетесь
fread
сfscanf
. Тогда вы пишете текстовый файл не как текст, а как двоичный файл. Вы должны использоватьfprintf
для вывода.2.
fread
иfscanf
оба прочитали из файла. Вы игнорируете все остальные пункты и не проверяете их на успехfscanf
.3. Входные и выходные данные являются текстовыми файлами, поэтому прекратите использовать
fread
иfwrite
. Управляйте циклом с помощьюwhile(fscanf( /*etc*/ ) == 6) { ... fprintf ( /*etc*/ ); }