Сохранение структуры в бинарно-открытый файл. Кто подскажет? - C (СИ)

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

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

Всем привет!) собственно проблема:
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);
Друзья. Структура st , создал в мэйне переменную: st group вот заполняю поля и хочу сохранить в файл.. но никак не могу разобраться чтоб целую структуру сохранило, вообще - возможно ли это сделать или нужно сохранение поочередно, по-полю? подскажите.. или скажите что можно почитать об этом.. может что-то упустил.. структура вроде заполняется нормально.. но вот сохранить в файл - не хочет( fwrite оставил пустым вкоде.. скажите что вставить.. буду дико благодарен!
там где 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);
}

Объяснение кода листинга программы

  1. В функции print() объявлена структура st и переменная fin, которая будет использоваться как файловый указатель.
  2. Переменная fin инициализируется вызовом функции fopen(def,rb). Функция fopen() открывает файл с именем def в бинарном режиме чтения.
  3. Затем в цикле while(!feof(fin)) происходит чтение данных из файла. Функция fread(&group, sizeof group, 1, fin) читает один блок данных размером sizeof group из файла в переменную group. Если чтение прошло успешно (то есть было прочитано именно sizeof group байт), то цикл продолжается. Если чтение не удалось (то есть было прочитано 0 байт), то цикл прерывается.
  4. В условии if(bytes_read != sizeof group) проверяется, что было прочитано именно sizeof group байт. Если это не так, то выводится сообщение об ошибке с помощью функции perror(hooita) и программа завершается с кодом ошибки 1 с помощью функции exit(1).
  5. В строке printf(%s %s %s %d\n, group->name, group->addr, group->dateofb, group->score) выводятся значения полей структуры st.
  6. После окончания цикла программа выводит новую строку с помощью функции puts(\n\n).
  7. Функция fclose(fin) закрывает файл.
  8. В основной программе необходимо вызвать функцию print().

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

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