Обновите конкретное значение в текстовом файле c

#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*/ ); }