Сохранение структуры в бинарно-открытый файл. Кто подскажет? - C (СИ)
Формулировка задачи:
Всем привет!)
собственно проблема:
Друзья. Структура st , создал в мэйне переменную:
st group
вот заполняю поля и хочу сохранить в файл.. но никак не могу разобраться чтоб целую структуру сохранило, вообще - возможно ли это сделать или нужно сохранение поочередно, по-полю? подскажите.. или скажите что можно почитать об этом.. может что-то упустил.. структура вроде заполняется нормально.. но вот сохранить в файл - не хочет( fwrite оставил пустым вкоде.. скажите что вставить.. буду дико благодарен!
FILE *fin=fopen(def,"a+b"); puts("\nEnter name:\n"); cin>> group->name; puts("\nEnter addres:\n"); cin>>group->addr; puts("\nEnter date of birth:\n"); cin>>group->dateofb; puts("\nEnter <score>:\n"); cin >> group->score; // fwrite(?,?,?,fin); fclose(fin);
там где def , в открытии файла: D:\\base.txt
Решение задачи: «Сохранение структуры в бинарно-открытый файл. Кто подскажет?»
textual
Листинг программы
void print() { struct st group; FILE *fin=fopen(def,"rb"); while(!feof(fin)) { size_t bytes_read = fread(&group, sizeof group, 1, fin); if(bytes_read == 0) break; if(bytes_read != sizeof group) { perror("hooita"); exit(1); } printf("%s %s %s %d\n", group->name, group->addr , group->dateofb, group->score); } puts("\n\n"); fclose(fin); }
Объяснение кода листинга программы
- В функции
print()
объявлена структураst
и переменнаяfin
, которая будет использоваться как файловый указатель. - Переменная
fin
инициализируется вызовом функцииfopen(
def,
rb)
. Функцияfopen()
открывает файл с именемdef
в бинарном режиме чтения. - Затем в цикле
while(!feof(fin))
происходит чтение данных из файла. Функцияfread(&group, sizeof group, 1, fin)
читает один блок данных размеромsizeof group
из файла в переменнуюgroup
. Если чтение прошло успешно (то есть было прочитано именноsizeof group
байт), то цикл продолжается. Если чтение не удалось (то есть было прочитано 0 байт), то цикл прерывается. - В условии
if(bytes_read != sizeof group)
проверяется, что было прочитано именноsizeof group
байт. Если это не так, то выводится сообщение об ошибке с помощью функцииperror(
hooita)
и программа завершается с кодом ошибки 1 с помощью функцииexit(1)
. - В строке
printf(
%s %s %s %d\n, group->name, group->addr, group->dateofb, group->score)
выводятся значения полей структурыst
. - После окончания цикла программа выводит новую строку с помощью функции
puts(
\n\n)
. - Функция
fclose(fin)
закрывает файл. - В основной программе необходимо вызвать функцию
print()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д