Бинарный файл не читается fread() - C (СИ)
Формулировка задачи:
инициализированную структуру записываю в файл,хочу ее прочитать из файла и записать в другую структуру.Записывается в файл нормально,а считывать из файла не хочет,срабатывает проверка и выводит Error read file! ,а printf() выводит мусор.
Если же вместо строки 36 вставляю вот это
то нормально работает.
Что не так с режимом открытия файла "a + b"?Он ведь должен позволять чтение а также запись в конец файла.
fclose(fp); fp = fopen(FILENAME, "rb");
#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+"
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д