Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74

Вывод данных из файла на экран

28.01.2020, 13:11. Показов 1164. Ответов 6

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, вот мой код. Записываем в файл фамилию, имя возраст для 100 человек. Потом вносим вручную одну позицию в начале файла и выводим их списком. Все работает. Потом мне надо вывести ее повторно,

Но второй вывод не работает, данные на первой строке пропадают. Почему?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
class MyClass
 
{
 
public:
 
                MyClass( string = "unassigned",  string = "", string = "0" );
 
                void setLastName( string );
 
                string getLastName()const ;
 
                void setFirstName( string );
 
                string getFirstName() const;
 
                void setAge( string );
 
                string getAge() const;
 
private:
 
   char lastName[ 15 ];
 
   char firstName[ 10 ];
 
   char age[ 4 ];
 
};
 
 
 
MyClass::MyClass( string lName, string fName, string ag )
 
{
 
   setLastName( lName );
 
   setFirstName( fName );
 
   setAge( ag );
 
}
 
void outputLine( ostream&, const MyClass & );
 
 
 
string MyClass::getLastName() const
 
{
 
   return lastName;
 
}
 
 
 
void MyClass::setLastName( string lastNameString )
 
{
 
   const char *lastNameValue = lastNameString.data();
 
   int length = lastNameString.size();
 
   length = ( length < 15 ? length : 14 );
 
   strncpy( lastName, lastNameValue, length );
 
   lastName[ length ] = '\0';
 
}
 
 
 
string MyClass::getFirstName() const
 
{
 
   return firstName;
 
}
 
 
 
void MyClass::setFirstName( string firstNameString )
 
{
 
    const char *firstNameValue = firstNameString.data();
 
   int length = firstNameString.size();
 
   length = ( length < 15 ? length : 14 );
 
   strncpy( firstName, firstNameValue, length );
 
   firstName[ length ] = '\0';
 
  
 
}
 
 
 
 
 
string MyClass::getAge() const
 
{
 
   return age;
 
} // end function getLastName
 
 
 
// set last-name value
 
void MyClass::setAge( string AgeString )
 
{
 
   const char *ageValue = AgeString.data();
 
   int length = AgeString.size();
 
   length = ( length < 5 ? length : 3 );
 
   strncpy( age, ageValue, length );
 
   age[ length ] = '\0';
 
}
 
 
 
int main()
 
{
 
   fstream outDate( "nameage.dat", ios::out | ios::binary |ios::in );
 
   if ( !outDate )
 
   {
 
      cerr << "File could not be opened." << endl;
 
      exit( 1 );
 
   }
 
   MyClass MyClassObject;
 
   
 
                outDate.seekg( 0 );
 
                for ( int i = 1; i < 2; i++ )
 
                               {
 
                               cout << "enter LastName, FirstName, Age " << endl;
 
                               string a, b, c;
 
                               cin >> a >> b >> c;
 
                               MyClass MyClassObject (a, b, c);
 
                               outDate.write( reinterpret_cast< const char * >( &MyClassObject ),   sizeof( MyClass ) );         
 
                               }
 
                              
 
                               outDate.seekg( 0 ); ///////// первый вывод
 
                               outDate.read( reinterpret_cast< char * >( &MyClassObject ),   sizeof( MyClass ) );       
 
 
 
     for ( int i = 0; i < 100; i++ ) 
 
     {
 
                cout << left << setw( 16 ) << i + 1 ;
 
     outputLine( cout, MyClassObject );
 
     outDate.read( reinterpret_cast< char * >( &MyClassObject ),   sizeof( MyClass ) );  
 
                }
 
               
 
                outDate.seekp( 0, ios::beg ); ////////// второй вывод
 
                                outDate.read( reinterpret_cast< char * >( &MyClassObject ),   sizeof( MyClass ) );       
 
 
 
     for ( int i = 0; i < 100; i++ ) 
 
     {
 
                cout << left << setw( 16 ) << i + 1 ;
 
     outputLine( cout, MyClassObject );
 
     outDate.read( reinterpret_cast< char * >( &MyClassObject ),   sizeof( MyClass ) );  
 
                }
 
                return 0;
 
}
 
void outputLine( ostream &output, const MyClass &record )
 
{
 
   output << left
 
      << setw( 16 ) << record.getLastName()
 
      << setw( 16 ) << record.getFirstName()
 
      << setw( 5 ) << record.getAge()
 
      << endl;
 
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.01.2020, 13:11
Ответы с готовыми решениями:

Ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хранилище данных в файле)
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и вывод данных из этого файла на экран...

Вывод на экран данных их бинарного файла
Привет, народ. Выручайте пожалуйста. Никак не могу сообразить, как вывести на экран данные из бинарного файла. В файле находятся записи...

Чтение из файла данных и последующий вывод на экран в виде линейного однонаправленного списка
Здравствуйте, я новичок в программировании. Не понимаю как выполнить следующую задачу: Дан список группы в 10 человек в виде ...

6
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 15:30
Цитата Сообщение от mlippi80 Посмотреть сообщение
Записываем в файл фамилию, имя возраст для 100 человек.
Цитата Сообщение от mlippi80 Посмотреть сообщение
outDate.seekp( 0, ios::beg ); ////////// второй вывод
Здесь, наверное, тоже надо seekg
0
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
28.01.2020, 15:31  [ТС]
Нет seekg тоже пробовал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 15:35
Цитата Сообщение от mlippi80 Посмотреть сообщение
Нет seekg тоже пробовал
Цитата Сообщение от mlippi80 Посмотреть сообщение
outDate.seekg( 0 ); ///////// первый вывод
Также как здесь, outDate.seekg( 0 )?
0
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
28.01.2020, 15:40  [ТС]
Да также. Seekp это я уже пробовал другие варианты
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 15:48
Лучший ответ Сообщение было отмечено mlippi80 как решение

Решение

Цитата Сообщение от mlippi80 Посмотреть сообщение
Да также. Seekp это я уже пробовал другие варианты
Надо сделать outDate.clear() перед повторным чтением

Добавлено через 1 минуту
Вернее, перед вторым outDate.seekg( 0 )

Добавлено через 3 минуты
В общем, после прочтения последней записи, fstream переходит в состояние eof. Надо его как-то сбросить, чтобы снова можно было читать
1
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 74
28.01.2020, 15:48  [ТС]
Да Спасибо большое сработало. И спасибо за разъяснения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2020, 15:48
Помогаю со студенческими работами здесь

Не могу понять как делать вывод на экран структуры STUDENT на заполнение и вывод данных на экран
Добрый вечер. Вот задание и мой код программы на C++ Не выходит нормально реализовать 3е задание. Первая проблема в том, что вывод на...

Вывод файла на экран
1)как вывести на экран текстовый файл, вот такого содержания: Список ФИО дата ...

вывод из файла на экран
Добрый вечер! Что-то я никак не пойму. Нужно вывести числа из файла на экран по пять числа в строке. И никак не могу понять как это...

Вывод содержимого файла на экран
Здравтвуйте, прошу вашей помощи. Мне вот надо, чтобы скрипт вывел на экран содержимое файла, скажем test.csv (текстовый), но вывел также,...

Вывод множества из файла на экран
В студенческой группе 30 человек. 15 из них знают английский, 10 знают немецкий, 7 знают французский. 30 фамилий записаны в текстовом...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru