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

Структура "ФИО": считать из файла, добавить запись

21.10.2014, 18:22. Показов 3806. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <dos.h>
#include <process.h>
#include <errno.h>
#include <iostream.h>
#include <fstream.h>
struct data
{char fio[20];
int nomer,inf,inmov,math,fiz;
};
data a;
int l;
 void readdb()
{
char *t="";
ifstream f;
f.open("3-011.txt");
int o=0;
while (!f.eof())
{
f.getline(a[o].fio,30,' ');
f.getline(t,4,' ');
a[o].nomer=atoi(t);
f.getline(t,3,' ');
a[o].inf=atoi(t);
f.getline(t,3,' ');
a[o].inmov=atoi(t);
f.getline(t,3,' ');
a[o].math=atoi(t);
f.getline(t,3);
a[o].fiz=atoi(t);
o++;
}
l=o;
}
 
void vivod()
{
for (int i=0;i<l;i++)
cout<<a[i].fio<<" "<<a[i].nomer<<" "<<a[i].inf<<" "<<a[i].inmov<<" "<<a[i].math<<" "<<a[i].fiz<<endl;
}
 
 
 
void main()
{int i;
while (i!=0)
{clrscr();
cout<<"1.Otkrit bazu"<<endl;
cout<<"2.Dobavit zapis"<<endl;
cin>>i;
switch (i)
{case 1:readdb();vivod();
default:cout<<"nety takoy cifri"<<endl;
}
}
 
 
}
в строках обращения к структуре в процедуре readdb ошибка везде illegal structure operation.
f.getline(a[o].fio,30,' '); в этой строке ошибка could not find a match 'istream::getline(undefined,int,char)';
как их убрать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2014, 18:22
Ответы с готовыми решениями:

Файл типа запись. Структура: название отдела, ФИО, сумма к выдаче
задача: Файл типа запись F содержит данные в формате: название отдела, ФИО, Сумма к выдаче. Записи упорядочены по ФИО. Прочитать файл....

Запись и Чтение из файлы данных структура(Номер квартиры, Фио жильцов, дата рождения)
Здравствуйте, хотел спросить помощи по программе , сама программа должна записывать в файл и считывать их файла данные структуры , а именно...

Вывести из файла определённую запись, и добавить запись в середину файла скопировав его в обратном порядке
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;locale.h&gt; using namespace std; class name { private: ...

15
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.10.2014, 18:26
Ты обращаешься к структуре как к массиву.
1
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
21.10.2014, 18:42
1. a -массив
C++
1
data a[100];
2. В main() надо инициализировать i
C++
1
int i=1;
1
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 37
21.10.2014, 19:04  [ТС]
спс.Теперь она запускается, но после нажатия на 1 выдает ошибку и закрывается.Файл с данными создан.

Добавлено через 11 минут
всё, разобрался.Всем спс!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
21.10.2014, 19:41
Пока, похоже, плохо разобрался.

Во-первых, заголовки стандартной библиотеки языка С++ не имеют расширения .h. Т.е. нет никакого <string.h> и <iostream.h>. Неужели это так трудно запомнить? За шестнадцадь-то лет стандартизованного С++.

Во-вторых, циклы вида 'while (!f.eof())' - это в 99% случаев - неправильный код.

В-третьих, 'int main', а не 'void main'
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 37
21.10.2014, 21:05  [ТС]
пишу в borland c++.Вся эта штука в нем работает нормально.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
21.10.2014, 21:13
Цитата Сообщение от Terrorblade Посмотреть сообщение
пишу в borland c++.Вся эта штука в нем работает нормально.
То, что что-то где-то "работает нормально" - это не повод это что-то использовать, не говоря уже о том, что такое "работает нормально" - это не более чем иллюзия, вызванная недостаточным тестированием кода.

Последнее особенно относится к циклам с предусловием '!f.eof()'.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
21.10.2014, 22:07
TheCalligrapher, В старых версиях не было пространства имен std.
И не было заголовочных файлов без .h
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
21.10.2014, 22:21
Цитата Сообщение от zss Посмотреть сообщение
TheCalligrapher, В старых версиях не было пространства имен std.
И не было заголовочных файлов без .h
Я знаю. Но язык С++ был стандартизован в 1998 году. То, что старые версии компиляторов какое-то время тащили за собой до-стандартные реализации библиотеки - это совсем не повод пользоваться этим динозаврами. Ну еще в 1999 году можно было. Но уже ж 2014 на дворе.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.10.2014, 22:33
Здесь нужна локальная структура и файл закрывать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void dobavit()
{l++;
 
data a;
 
cin>>a.fio;
cin>>a.nomer;
cin>>a.inf;
cin>>a.inmov;
cin>>a.math;
cin>>a.fiz;
ofstream f;
f.open("3011.txt",ios::app);
f<<endl;
f<<a.fio<<" "<<a.nomer<<" "<<a.inf<<" "<<a.inmov<<" "<<a.math<<" "<<a.fiz;
 
f.close();
 
cout<<"Zapis dbavlena!";
getch();
}
А для чего l я вообще не пойму.
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 37
22.10.2014, 23:20  [ТС]
 Комментарий модератора 
Зачем плодите новые темы?

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
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <dos.h>
#include <process.h>
#include <errno.h>
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
struct data
{char fio[20];
int nomer;
int inf;
int inmov;
int math;
int fiz;
};
data a[100],temp[100];
int l;
char db[20];
 
 
 
 
 
void readdb(char db[20])
{
char t[20];
ifstream f;
f.open(db,ios::in);
int o=0;
while (!f.eof())
{
f.getline(a[o].fio,20,' ');
f.getline(t,4,' ');
a[o].nomer=atoi(t);
f.getline(t,3,' ');
a[o].inf=atoi(t);
f.getline(t,3,' ');
a[o].inmov=atoi(t);
f.getline(t,3,' ');
a[o].math=atoi(t);
f.getline(t,3);
a[o].fiz=atoi(t);
o++;}
l=o;
f.close();
}
 
void vivod()
{
cout<<setw(20)<<"ÔÈÎ"<<setw(10)<<"ÍÎÌÅÐ"<<setw(10)<<"ÈÍÔÎÐÌ."<<setw(10)<<"ÈÍ.ßÇ."<<setw(10)<<"ÌÀÒÅÌ"<<setw(10)<<"ÔÈÇ."<<endl;
for (int i=0;i<l;i++)
cout<<setw(20)<<a[i].fio<<setw(10)<<a[i].nomer<<setw(10)<<a[i].inf<<setw(10)<<a[i].inmov<<setw(10)<<a[i].math<<setw(10)<<a[i].fiz<<endl;
}
 
void add(char db[20])
{char a[20];
int nomer,inf,inmov,math,fiz;
cout<<"Ââåäèòå ôàìèëèþ"<<endl;
cin>>a;
cout<<"Ââåäèòå íîìåð"<<endl;
cin>>nomer;
cout<<"Ââåäèòå îöåíêó ïî èíôîðìàòèêå"<<endl;
cin>>inf;
cout<<"Ââåäèòå îöåíêó ïî Èí.ßç."<<endl;
cin>>inmov;
cout<<"Ââåäèòå îöåíêó ïî ìàòåìàòèêå"<<endl;
cin>>math;
cout<<"Ââåäèòå îöåíêó ïî ôèçèêå"<<endl;
cin>>fiz;
ofstream f;
f.open(db,ios::app);
 
f<<a<<" "<<nomer<<" "<<inf<<" "<<inmov<<" "<<math<<" "<<fiz;
f.close();
 
}
void create()
{char e[20];
int i;
cout<<"Ââåäèòå íàçâàíèå íîâîé áä"<<endl;
cin>>e;
ofstream f;
f.open(e);
cout<<"Èñïîëüçîâàòü å¸ ñåé÷àñ?"<<endl;
cout<<"1.ÄÀ"<<endl;
cout<<"2.ÍÅÒ"<<endl;
cin>>i;
if (i==1) strcpy(db,e);
 }
 
void sortirovka(char db[20])
{
readdb(db);
ofstream f;
f.open(db);
for (int i=0;i<l;++i)
for (int j=i+1;j<l;++j)
if (a[i].nomer>a[j].nomer)
{strcpy(temp[0].fio,a[i].fio);
temp[0].nomer=a[i].nomer;
temp[0].inf=a[i].inf;
temp[0].inmov=a[i].inmov;
temp[0].math=a[i].math;
temp[0].fiz=a[i].fiz;
 
strcpy(a[i].fio,a[j].fio);
a[i].nomer=a[j].nomer;
a[i].inf=a[j].inf;
a[i].inmov=a[j].inmov;
a[i].math=a[j].math;
a[i].fiz=a[j].fiz;
 
strcpy(a[j].fio,temp[0].fio);
a[j].nomer=temp[0].nomer;
a[j].inf=temp[0].inf;
a[j].inmov=temp[0].inmov;
a[j].math=temp[0].math;
a[j].fiz=temp[0].fiz;
}
 
for(int i=0;i<l-1;i++)
f<<a[i].fio<<" "<<a[i].nomer<<" "<<a[i].inf<<" "<<a[i].inmov<<" "<<a[i].math<<" "<<a[i].fiz<<endl;
f<<a[l-1].fio<<" "<<a[l-1].nomer<<" "<<a[l-1].inf<<" "<<a[l-1].inmov<<" "<<a[l-1].math<<" "<<a[l-1].fiz;
 
}
 
void deleting(char db[20])
{int nomer;
readdb(db);
ofstream f;
f.open(db);
cout<<"Êàêîé íîìåð óäàëèòü?"<<endl;
cin>>nomer;
for (int i=0;i<l-1;i++)
if (a[i].nomer!=nomer)
f<<a[i].fio<<" "<<a[i].nomer<<" "<<a[i].inf<<" "<<a[i].inmov<<" "<<a[i].math<<" "<<a[i].fiz<<endl;
f<<a[l-1].fio<<" "<<a[l-1].nomer<<" "<<a[l-1].inf<<" "<<a[l-1].inmov<<" "<<a[l-1].math<<" "<<a[l-1].fiz;
 f.close();
 
}
 
 
 
 
 
int main()
{int i=0;
cout<<"Ââåäèòå íàçâàíèå áä â ôîðìàòå ****.txt"<<endl;
cin>>db;
 
do
{
readdb(db);
sortirovka(db);
clrscr();
cout<<"1.Âûâåñòè áàçó"<<endl;
cout<<"2.Äîáàâèòü çàïèñü"<<endl;
cout<<"3.Ïåðåêë. íà äðóãóþ áä"<<endl;
cout<<"4.Ñîçäàòü ÁÄ"<<endl;
cout<<"5.Óäàëèòü çàïèñü"<<endl;
cin>>i;
switch(i)
{
case 1:clrscr();vivod();getch();break;
case 2:clrscr();add(db);break;
case 3:clrscr();cout<<"Ââåäèòå íàçâàíèå áä â ôîðìàòå ****.txt"<<endl;cin>>db;break;
case 4:clrscr();create();break;
case 5:clrscr();deleting(db);cout<<"Óäàëåíî!";break;
default:cout<<"Íåòó òàêîãî ìåíþ"<<endl;
}
} while (i!=0);
}
Доделал курсач и появилась непонятная проблема.Почему-то после вызова функции add() в вписывания фамилии в а, оно заносит в файл без 1 буквы.Н-р. ввожу Смирнов, а в файл заносится мирнов.
Хотя до добавления функции deleting() всё работало нормально.Помогите!!
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2014, 02:05
Весь код не изучал, но:
Цитата Сообщение от Terrorblade Посмотреть сообщение
C++
1
f<<a<<" "<<nomer<<" "<<inf<<" "<<inmov<<" "<<math<<" "<<fiz;
Если так добавлять запись, то она будет без пробела присоединена к предыдущей записи, при чтении будет ошибка. Делайте каждую запись (структуру) в отдельной строке, и не нужно усложнять чтение (atoi(t) и пр.). Для чтения чисел есть методы форматируемого чтения (f >> a[o].nomer, и т.д.). Т.е., фамилию читать через f.getline(), остальное - через f >> (если фамилия из одного слова, то и её можно через f >> ). В конце итерации не забыть убрать, перед f.getline(), символ новой строки: f.get(). Само чтение фамилии поместить в параметр while(), чтобы не было лишнего чтения.
1
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 37
23.10.2014, 08:05  [ТС]
оно добавляет как надо,но именно фамилия заносится без 1 буквы!
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
23.10.2014, 09:46
а не все ли заглавные буквы не пишутся?
Была в этом разделе подобная проблема, связанная с локализацией.
Попробуйте писать фамилию латинскими буквами.
1
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 37
23.10.2014, 15:39  [ТС]
решил проблему путём добавления endl перед а
C++
1
f<<endl<<a<<" "<<nomer<<" "<<inf<<" "<<inmov<<" "<<math<<" "<<fiz;
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2014, 18:03
Цитата Сообщение от Terrorblade Посмотреть сообщение
решил проблему путём добавления endl перед а
А я о чём писал?
Цитата Сообщение от alsav22 Посмотреть сообщение
Делайте каждую запись (структуру) в отдельной строке
Только обычно так разделяют строки (не в начале строки ставят endl, а в конце):
C++
1
f<<a<<" "<<nomer<<" "<<inf<<" "<<inmov<<" "<<math<<" "<<fiz<<endl;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2014, 18:03
Помогаю со студенческими работами здесь

При изменении ФИО в первом листе добавить новую ячейку с ФИО во второй лист
Как сделать чтобы при изменении ФИО в первом листе добавлялась новая ячейка с ФИО во второй лист, но при этом сохранялась ячейка с...

Структура и запись,чтение из файла
Помогите,пожалуйста с задачей.У меня не совсем работает код.И как сделать остальные 2 задания?Пока есть только меню. В файле типа RECORD...

Структура, запись из файла в массив
Всем привет, очень нуждаюсь в вашей помощи делаю лабу #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;iostream.h&gt; #include...

Из файла .txt данные = ФИО и з\п, как вытащить ФИО с з\п менее 20 тыс
Помогите плиз решить задачу. В файле .txt данные с фио и зарплатой. Надо чтобы пайтон напечатал только те ФИО, где зп менее 20 тысяч.

Запись и чтение из файла. Структура. Сортировка
Здравствуйте. Мне нужно составить программу. Я написал, часть программы, мне нужно производить чтение и запись в файл (в самом файле должно...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru