С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
knf
16 / 16 / 8
Регистрация: 18.09.2012
Сообщений: 184
1

Запись в файл некоторого количества структур

18.04.2013, 23:18. Просмотров 398. Ответов 8
Метки нет (Все метки)

Надо записать в файл некоторое количество записей, не используя массивов.
Знаю что надо через write(), но вот как правильно передать параметры ..
Есть структура
C++
1
2
3
4
5
6
struct examen 
{
    char group[80];
    char date[50];
    char subject[100];
}timelable;
В цикле записываются структуры..

Добавлено через 15 минут
А кажется так))
C++
1
out.write((char*)&timelable,sizeof(timelable));
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 23:18
Ответы с готовыми решениями:

Запись структур в файл
У меня есть файл и масив структур. Надо реализовать запись и чтения файла....

Запись структур в файл
Здравствуйте! Имеется структура struct user { char login; char password;...

Запись структур в файл
Доброго всем времени суток.:dance: Обращаюсь к вам с таким вопросом : Взяв за...

Запись структур в файл
можно ли сделать так что бы структуру base, которую нужно записать несколько...

Запись классов, структур в файл
Подскажите как правильно, записывать и читать данные с файла, особенно если...

8
BuGi
24 / 24 / 11
Регистрация: 02.01.2012
Сообщений: 371
18.04.2013, 23:24 2
C++
1
out << timelable.group << endl << timelable.date << endl << timelable.subject << endl;
Если fstream. Или надо сразу целую структуру?
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
18.04.2013, 23:26 3
Цитата Сообщение от knf Посмотреть сообщение
А кажется так))
Код C++
1
out.write((char*)&timelable,sizeof(timelable));
Нет не так, подумайте дольше над строками. Подсказка выведите sizeof(timelable) и посмотрите чему он равен.
0
knf
16 / 16 / 8
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:36  [ТС] 4
stima,
C++
1
cout<<sizeof(timelable)
==230

Добавлено через 1 минуту
C++
1
out.write((char*)&timelable,sizeof(timelable));
Вообще, так записалось, но по какой-то причине при чтении из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int print(char filename[80])
{   examen ex;
    ifstream in(filename);
    if(!in.is_open())
    {
        cout<<"Такого файла не существует";
        return 1;
 
    }
    while(!in.eof())
    {
        in.read((char*)&timelable,sizeof(timelable));
        cout<<"Группа";
        cout<<timelable.group<<endl;
 
        cout<<"Дата";
        cout<<timelable.date<<endl;
 
        cout<<"Предмет";
        cout<<timelable.subject<<endl;
 
 
    }
 
return 0;
}
Выводит два раза. Почему-то не достигается конец файла...
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
18.04.2013, 23:46 5
По поводу sizeof() забейте, вечер, поздно голова думала о другом.
По повод eof() в случае чтения побайтно пишите так
C++
1
for ( ; in.read((char*)&timelable,sizeof(timelable)); )
Почему? Кратко EOF это тоже байт)
1
knf
16 / 16 / 8
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:50  [ТС] 6
stima, А можно подробнее про последнее?) Если не сегодня, то завтра) просто все тут придется объяснять
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
19.04.2013, 01:10 7
Попытаюсь обьяснить. По поводу того почему мы 2 раза итерируемся.
1. Вы считали успешно впритык. eof нету.
2. Вы попросили читать еще раз. Данных для считывания нет. eof есть.

По поводу одинаковых данных. Вы просто не перезатерли предидущие данные. Обьявите переменную локально, и проинициализируйте ее поля Вашей меткой. Так вот во второй раз выведется метка.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
19.04.2013, 02:54 8
Есть 2 пути:
1) извращаться с бинарным считыванием, write, sizeof, все такое
2) записать как если бы это был вывод на экран, только направить в файл

Можно перегрузить для вашей структуры оператор <<
C++
1
2
3
4
5
std::ostream & operator<< (std::ostream &out, const examen &e)
{
    out << e.group << std::endl << e.date << std::endl << e.subject << std::endl;
    return out;
}
и выводить данный структурный тип данных как если бы это был POD тип.
0
knf
16 / 16 / 8
Регистрация: 18.09.2012
Сообщений: 184
19.04.2013, 17:13  [ТС] 9
У нас требуется
Цитата Сообщение от MrGluck Посмотреть сообщение
извращаться
0
19.04.2013, 17:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 17:13

Запись массива структур в файл
Запись массива структур в файл так, что бы потом можно было считывать, удалять...

Запись в файл структур(с указателем)
Добрый день, подскажите, как корректно записать и прочитать в файл структуру,...

Упорядочить файл структур по убыванию количества жителей (при равенстве - по возрастанию площади)
Есть задача. Меня конкретно интересует как упорядочить по возрастанию площади,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru