我正在编写一个程序,该程序具有银行客户(BankAccount)的结构,该结构具有 3 个元素 - 帐号、客户名称和银行余额。我有一个已经包含记录的文件,并且我有一个修改余额的功能。但是,我无法这样做。余额保持不变。我认为我的 fseek() 是错误的,但我不确定如何/为什么。我在一些可能不需要的地方使用了 fflush(stdin) ,但我认为这与问题无关。我发表评论是为了让您了解我的逻辑,以防万一我的概念有一些误解。这是代码:
void modify(){
int account_number;
FILE *ptr;
BankAccount account;
ptr = fopen("account.txt", "r+");
printf("Enter account number: ");
fflush(stdin);
scanf("%d", &account_number);
while (!feof(ptr)) // To search the whole "account.txt" file.
{
fread(&account, sizeof(BankAccount), 1, ptr); //brings record into memory
if (account.account_number == account_number){ // if record's account number is same as account number entered by user above
printf("***Account found***\n\nAccount number: %d\nAccount name: %s\nAccount balance: %.2f\n", account.account_number, account.name, account.balance);
printf("\nEnter new balance: ");
fflush(stdin);
scanf("%f", &account.balance); // rewrites account's balance in memory
fseek(ptr, -sizeof(BankAccount), SEEK_CUR); //pointer seeked to the beginning of the record to overwrite it with the one in memory
fwrite(&account,sizeof(BankAccount), 1, ptr); // record overwritten
return;
}
}
printf("Account not found\n");
fflush(stdin);
getch();
}
这是我的项目的整个 .cpp 文件,如果您想运行它:源代码。我会很感激一些指导。提前致谢。