Теперь функции работают с файлом. Обновлен файл успешно. но когда я печатаю x.curbal
например printf("Current Balance: %.2f\n",x.curbal);
, он печатает старое значение. Но когда я закрою программу и снова ее открою, было напечатано значение .Работа с файлами и функции (Обновление файла)
void updateFile(struct client x, float bal)
{
FILE *orig;
FILE *copy;
orig = fopen("ACCOUNT.txt","r");
fread(&x,sizeof(x),1,orig);
/*fscanf(orig,"%s %s %s %s %f",x.accnum,x.accode,x.fname,x.lname,x.curbal);*/
x.curbal = bal;
copy = fopen("temp.txt","w");
fwrite(&x,sizeof(x),1,copy);
/*fprintf(copy,"%s %s %s %s %f",x.accnum,x.accode,x.fname,x.lname,x.curbal);*/
fclose(orig);
fclose(copy);
remove("account.txt");
rename("temp.txt","account.txt");
}
void withdraw(struct client x)
{
FILE *fp;
FILE *orig;
FILE *copy;
float debit = 0;
float withdrawal;
fp = fopen("history.txt","a+");
if (fp!=NULL)
{
printf("====WITHDRAW====\n");
printf("Date: %s\n",currdate);
printf("Time: %s\n",currtime);
printf("Name: %s,%s\n",x.lname,x.fname);
printf("Account Number: %s\n",x.accnum);
printf("Current Balance: %.2f\n",x.curbal);
printf("Withdrawal Amount: Php ");
scanf("%f",&withdrawal);
if((s.curbal-withdrawal) < 0)
{
clrscr();
system("cls");
printf("Transaction Failed.\n\n");
printf("Insufficient Funds!!!\n\n");
getch();
}
else
{
x.curbal = x.curbal - withdrawal;
clrscr();
updateFile(x,x.curbal);
fprintf(fp,"%s %s %s %.2f %.2f\n",x.accnum,histdate,currtime,debit,withdrawal);
printf("Transaction Completed.\n\n");
printf("Php %.2f was deducted.\n\n",withdrawal);
printf("Remaining Balance: Php %.2f\n\n\n",x.curbal);
getch();
}
}
}
Прежде всего, проверка * все * из ваших операций ввода-вывода для достижения успеха, а не предполагая, что они работали. – WhozCraig
Эта строка: 'void updateFile (struct client x, float bal)' должно быть: 'void updateFile (struct client * x, float bal)', затем эта строка: 'fread (& x, sizeof (x), 1, orig) ;» должен быть: 'fread (& x, sizeof (struct client), 1, orig);' и эта строка: 'fwrite (& x, sizeof (x), 1, copy); должен быть: 'fwrite (& x, sizeof (struct client), 1, copy); потому что C передает параметры по значению, а не по ссылке, поэтому данные вызывающих абонентов не обновляются текущим кодом – user3629249
Да, они работают. – imagineracoon