Бинарный файл не читается fread() - C (СИ)

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

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

инициализированную структуру записываю в файл,хочу ее прочитать из файла и записать в другую структуру.Записывается в файл нормально,а считывать из файла не хочет,срабатывает проверка и выводит Error read file! ,а printf() выводит мусор. Если же вместо строки 36 вставляю вот это
fclose(fp);
fp = fopen(FILENAME, "rb");
то нормально работает. Что не так с режимом открытия файла "a + b"?Он ведь должен позволять чтение а также запись в конец файла.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNAME 27
#define MAXSTREET 14
#define MAXKOS 18
#define FILENAME "stadium.dat"
struct adress
{
    char street[MAXSTREET];
    short building;
};
struct stadium
{
    char name[MAXNAME];
    struct adress where;
    int capacity;
    char kinds_of_sports[8][MAXKOS];
};
int main()
{
    struct stadium Millenium = {"Millenium", {"Wembley", 27}, 75000,{"High jump","long jump","Running hurdles",
                                    "javelin-throwing","baseball","football",
                                    "pole vaulting","shot put"} };
    struct stadium *stad;
    struct stadium A[4];
    stad = &Millenium;
    //stad2 = &A[1];
    FILE *fp;
    fp = fopen(FILENAME, "a + b");
    if(!fp)
        fputs("Error opening file!", stderr);
    rewind(fp);
    if(1 != fwrite(stad, sizeof(struct stadium), 1, fp))
        puts("Error write file!");
    rewind(fp);
    if(1 != fread(A, sizeof(struct stadium), 1, fp))
        puts("Error read file!");
    printf("%s %s %d %d %s %s\n", A[0].name, A[0].where.street, A[0].where.building,
            A[0].capacity, A[0].kinds_of_sports[0],A[0].kinds_of_sports[7]);
    return 0;
}

Решение задачи: «Бинарный файл не читается fread()»

textual
Листинг программы
"ab+"

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


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

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

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