Я пишу проект и наткнулся на проблему.
Моя часть должна взять записи и сохранить их как структуру в файл. Кажется, все работает правильно, пока я не попытаюсь их спасти. Это мой get_db_entry
код:
printf("Please enter a forename: ");
fflush(stdin);
fgets(st[index].forename, STRING_SIZE, stdin);
printf("Please enter a surname: ");
fflush(stdin);
fgets(st[index].surname, STRING_SIZE, stdin);
printf("Please enter an address: ");
fflush(stdin);
fgets(st[index].address, STRING_SIZE, stdin);
printf("Please enter plate number: ");
fflush(stdin);
fgets(st[index].plate_number, STRING_SIZE, stdin);
printf("Please enter account balance: ");
fflush(stdin);
scanf("%f", &st[index].balance);
И сохранение выглядит так:
void save_db(struct customer *st){
FILE *pFile;
int file_nof=0;
FILE *pnof;
pnof=fopen("nof_db.dat", "rb");
fread(&file_nof, sizeof(int), 1, pnof);
fclose(pnof);
printf("File_nof value: %d\n", file_nof);
fflush(stdin);
if((pFile = fopen("database.dat", "ab")) != NULL) // Open file in write/update mode
{
fwrite(st, file_nof*sizeof(struct customer), 1, pFile);
fclose(pFile);
}
else
{
printf("Cannot open file");
exit(1);
}}
Я проверял множество раз, и значение индекса передается правильно, что означает, что оно составляет 0,1,2 и т. Д.
Записи сохраняются для 0,2,4,6, поэтому каждую запись буквально дополняет пустая структура, например: index=0
всегда сохраняет правильно, затем index=1
- пусто, хотя программа сохраняет в index=2
автоматически.
Это оставляет меня с пустыми пространствами и пустой тратой пространства.
Есть несколько проверок, которые проверяют значение «индекса», поэтому я не знаю, что происходит.
PS.
file_nof = nof_entries = index+1