Чтение простых структур из двоичного файла и отображение конкретных данных на экране в - PullRequest
0 голосов
/ 30 июня 2018

Я новичок в программировании и пишу свой первый проект. Часть моего проекта требует опроса пользователя на день, месяц и год; записать заметку в файл и затем отобразить соответствующую заметку с указанием месяца и года на экране. Вот моя структура для заметок:

typedef struct event{
    int day;
    int month;
    int year;
    char title[20];
    char text[400];
} Note;

и вот часть, относящаяся к вводу:

fptr = fopen("note.bin","wb");
printf("\n\n\t\tAdd title:\n");
fgets(tempNote.title, 20, stdin);
fwrite(&tempNote.title, sizeof(tempNote.title), 1, fptr);
fseek(fptr, sizeof(Note), SEEK_CUR);
printf("\n\n\t\tAdd your note:\n");
fgets(tempNote.text, 400, stdin);
fwrite(&tempNote.text, sizeof(tempNote.text), 1, fptr);
fclose(fptr);

и, наконец, часть, которая отвечает за чтение и отображение данных на основе заданного месяца и года:

fptr = fopen("note.bin","rb");
int len = 0;
while(1)
{
    fread(&tempNote, sizeof(Note), 1, fptr);
    if(feof(fptr) != 0) break;
    if(tempNote.month == month && tempNote.year == year)
    {
        len++;
    }
}
fclose(fptr);
for( int i = 0; i <= len ; i++)
{
    printf("\nYOUR NOTE %d\n",i);
    printf("%d\t%d\t%d\t%s\t%s",noteCollection[i].day, noteCollection[i].month, noteCollection[i].year, noteCollection[i].title, noteCollection[i].text);
}

Как только я запустил программу, вывод в конце показывает некоторые данные, похожие на мусор. Я пытался прочитать те же вопросы, но до сих пор мне не удалось разобраться в проблеме. Итак, что я пропускаю ??

1 Ответ

0 голосов
/ 30 июня 2018

Ваша функция вывода делает что-то странное:

fwrite(&tempNote.title, sizeof(tempNote.title), 1, fptr);
fseek(fptr, sizeof(Note), SEEK_CUR);
fwrite(&tempNote.text, sizeof(tempNote.text), 1, fptr);

Нет необходимости fseek() после записи. Вместо этого я бы сначала заполнил весь tempNote, а затем написал все сразу:

fwrite(&tempNote, sizeof(tempNote), 1, fptr);

Затем, читая его обратно, вы можете прочитать всю структуру за один раз (или, возможно, прочитать повторно, пока не дойдете до конца файла).

...