Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
#1

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

18.04.2013, 23:18. Просмотров 375. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в файл некоторого количества структур (C++):

Запись структур в файл - C++
Здравствуйте! Имеется структура struct user { char login; char password; }; Записываю несколько таких в файл

Запись структур в файл - C++
У меня есть файл и масив структур. Надо реализовать запись и чтения файла. Можна ли сделать так: запускаю первый раз програму, ввожу дание...

Запись структур в файл - C++
Доброго всем времени суток.:dance: Обращаюсь к вам с таким вопросом : Взяв за основу Задача 2 Лабораторной работы изменить код...

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

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

Запись в файл структур(с указателем) - C++
Добрый день, подскажите, как корректно записать и прочитать в файл структуру, если она содержит указатель на другую струкруту? struct two...

8
BuGi
24 / 24 / 1
Регистрация: 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 / 43
Регистрация: 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 / 2
Регистрация: 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 / 43
Регистрация: 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 / 2
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:50  [ТС] #6
stima, А можно подробнее про последнее?) Если не сегодня, то завтра) просто все тут придется объяснять
0
stima
495 / 345 / 43
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
19.04.2013, 01:10 #7
Попытаюсь обьяснить. По поводу того почему мы 2 раза итерируемся.
1. Вы считали успешно впритык. eof нету.
2. Вы попросили читать еще раз. Данных для считывания нет. eof есть.

По поводу одинаковых данных. Вы просто не перезатерли предидущие данные. Обьявите переменную локально, и проинициализируйте ее поля Вашей меткой. Так вот во второй раз выведется метка.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7523 / 4661 / 703
Регистрация: 29.11.2010
Сообщений: 12,733
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 / 2
Регистрация: 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
Привет! Вот еще темы с ответами:

Запись классов, структур в файл - C++
Подскажите как правильно, записывать и читать данные с файла, особенно если записываются данные разных типов) Работает но как то не...

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

Считывание и запись структур в бинарный файл - C++
Здравствуйте, я делаю автоподгрузку и авто сохранение некоторой структуры в бинарный файл. И где-то допустил грубую ошибку, ибо...

Запись массива структур в бинарный файл - C++
Есть структура Owner: struct Owner{ char name; unsigned int purse; short catb; void addcat(short num); }; ...


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

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

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