Структуры сохраняют каждое второе значение индекса в C - PullRequest
0 голосов
/ 06 мая 2018

Я пишу проект и наткнулся на проблему.

Моя часть должна взять записи и сохранить их как структуру в файл. Кажется, все работает правильно, пока я не попытаюсь их спасти. Это мой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...