Структуры в файле с++

317
24 апреля 2017, 04:49

Создаю структуру. Ввожу данный . Сохраняю в файл. Затем вынимаю из файла и вывожу на экран.

struct sname
{
char fio[256];
int vozrast;
};sname s;
int main()
{   SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
FILE * kar;
        kar = fopen("kar.bin", "wb");
        cout << "Введите ФИО:";
        cin.getline(s.fio, 256);
        cout << "Введите возраст:";
        cin >> s.vozrast;
        cin.ignore();
        fwrite(&s, sizeof(s), 1, kar);
        fclode(kar);
       kar= fopen("kar.bin", "rb");
       fread(&s, sizeof(s), 1, kar);
       cout << "ФИО:"<<s[i].fio<<endl;
       cout << "Возраст:" << s[i].vozrast << endl;
       fclose(kar);
return 0;
}

Каждый раз когда я ввожу данные структуры char fio[256]; int vozrast; сохраняются в файле. И как сделать цикл просмотра. Допустим я введу 5 записей с элементамиchar fio[256]; int vozrast; и в файле уже сохранен 2 записи. Того выходит 7 записей. Как сделать автоматический цикл, ну который определит, что в файле 7 записей структуры и выведет их на экран?

Answer 1

все очень просто. Читаем в цикле, пока не достигнем конца файла

FILE * pFile;
sname sn;
int n = 0;
pFile = fopen ("kar.bin","rb");
if (pFile==NULL) perror ("Ошибка открытия файла");
else {
    while (fread(&sn, sizeof(sname), 1,pFile) != 1) {
      n++;
      // обрабатываем sn - печать и прочье
    }
    if (feof(pFile)) {
      puts ("Конец файла достигнут.");
      printf ("прочитано записей: %d\n", n);
    }
    else puts ("Конца файла не достигли.");
    fclose (pFile);
}

feof в while вставлять нет смысла - он делает немного не то, что от него обычно ожидают - он не проверяет, будет ли сейчас конец файла, а проверяет, не был ли конец файла, когда с него последний раз читали (а в этом случае там будет не 1 - то есть, не одна запись).

READ ALSO
Блокировка с двойной проверкой

Блокировка с двойной проверкой

В книге Энтони Уильямса "Параллельное программирование на C++ в действии" рекомендуется заменять использование упомянутого в заголовке паттерна...

325
контейнер map c++

контейнер map c++

Как использовать контейнер map, для хранения счетчиков?

263
Вывести структуру на экран

Вывести структуру на экран

имеется вот такой код

328
sizeof() и битовые поля

sizeof() и битовые поля

Вот имеется структура:

345