Работа с бинарными файлами, конец бинарного файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Хотел разобраться с работой с бинарными файлами в Си. Столкнулся с проблемой: данные в файл я записываю пять раз, однако, когда делаю просмотр от начала до конца файла и вывожу их на экран, я обнаружил что последний элемент дублируется дважды. В чем дело, почему так происходит?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct foo
{
    int some_digit;
    char some_symbol;
};
 
typedef struct foo foo;
 
foo create()
{
    static int a = 1;
    static char b = 'A';
    foo new_element;
    new_element.some_digit = a;
    new_element.some_symbol = b;
    a++;
    b++;
    return new_element;
}
 
int main()
{
    FILE* file = NULL;
    file = fopen("test.bin", "wb+");
 
    if(file != NULL)
    {
        foo temporary1;
        int i = 0;
 
        for(i = 0; i < 5; i++)
        {
            temporary1 = create();
            fwrite(&temporary1, sizeof(foo), 1, file);
        }
 
        foo* temporary2 = NULL;
        temporary2 = malloc(sizeof(foo));
 
        rewind(file);
        fseek(file, 0, SEEK_SET);
 
        while(feof(file) == 0)
        {
            fread(temporary2, sizeof(foo), 1, file);
            printf("\n%d\t%c\n", temporary2->some_digit, temporary2->some_symbol);
        }
    }
    return 0;
}
Заранее спасибо за помощь.

Решение задачи: «Работа с бинарными файлами, конец бинарного файла»

textual
Листинг программы
while(fread(...) == sizeof(foo))
    printf(...);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы