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

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

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

Доброго времени суток. Хотел разобраться с работой с бинарными файлами в Си. Столкнулся с проблемой: данные в файл я записываю пять раз, однако, когда делаю просмотр от начала до конца файла и вывожу их на экран, я обнаружил что последний элемент дублируется дважды. В чем дело, почему так происходит?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct foo
  5. {
  6. int some_digit;
  7. char some_symbol;
  8. };
  9. typedef struct foo foo;
  10. foo create()
  11. {
  12. static int a = 1;
  13. static char b = 'A';
  14. foo new_element;
  15. new_element.some_digit = a;
  16. new_element.some_symbol = b;
  17. a++;
  18. b++;
  19. return new_element;
  20. }
  21. int main()
  22. {
  23. FILE* file = NULL;
  24. file = fopen("test.bin", "wb+");
  25. if(file != NULL)
  26. {
  27. foo temporary1;
  28. int i = 0;
  29. for(i = 0; i < 5; i++)
  30. {
  31. temporary1 = create();
  32. fwrite(&temporary1, sizeof(foo), 1, file);
  33. }
  34. foo* temporary2 = NULL;
  35. temporary2 = malloc(sizeof(foo));
  36. rewind(file);
  37. fseek(file, 0, SEEK_SET);
  38. while(feof(file) == 0)
  39. {
  40. fread(temporary2, sizeof(foo), 1, file);
  41. printf("\n%d\t%c\n", temporary2->some_digit, temporary2->some_symbol);
  42. }
  43. }
  44. return 0;
  45. }
Заранее спасибо за помощь.

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

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

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


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

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

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы