Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.04.2022
Сообщений: 5
1

Строки, потоки, функции C++, ввод и вывод в текстовый

22.10.2022, 15:50. Показов 738. Ответов 0

Author24 — интернет-сервис помощи студентам
По всей видимости, я не до конца понимаю работы с файловыми потоками. Так как я использовал методичку, то приведу задание. Мне бы хотелось понять, где все ломается. Я так понимаю, поток в файл у меня точно работает не правльно, но и с выводом я что-то сделал не правильно.

Задание 1: (работает)
Предметная область:
Техническое обслуживание (ТО) автомобилей
Структурный тип данных:
Транспортное средство (vehicle)
Элементы структуры:
ФИО владельца (owner)
Регистрационный номер (reg_number)
Тип автомобиля (type)
Марка автомобиля (brand)
Объем двигателя (volume)
Мощность двигателя (power)
Дата последнего ТО (last_to)
Пробег (mileage)

Задание 2: (не работает)
1) Вывести на экран регистрационные номера всех автомобилей с пробегом свыше
100000 км.
2) Вывести на экран фамилии владельцев всех автомобилей, прошедших ТО в
течение последнего месяца
1. Реализуйте ввод исходных данных (массива структур) из текстового файла.
2. Текстовый файл должен содержать информацию о количестве записей и,
последовательно, значения всех полей. Оформите чтение данных из файла в виде
отдельной процедуры.
3. Реализуйте вывод на экран всего массива структур, оформив в виде отдельной
процедуры.

И моя несчастная программа:

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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
#include <iostream>
#include <ctime>
#include <clocale>
#include <fstream> 
#include <locale>
#include <Windows.h>
#include <string>
 
using namespace std;
//const int garageSize = 5;
 
//структура с полями данных об автомобиле и дате
struct dataTime {
    int year;
    int month;
    int day;
 
};
 
 
struct Vehicle
{
    string owner;
    string ownerName;
    string reg_number;
    string brand;
    bool type;
    float volume;
    float power;
    dataTime last_to; //дата
    int mileage;
};
 
Vehicle read_Vehicle(ifstream &file) {
    Vehicle aVehicle;
    getline(file, aVehicle.owner);
    getline(file, aVehicle.ownerName);
    getline(file, aVehicle.reg_number);
    getline(file, aVehicle.brand);
    file >> aVehicle.type;
    file >> aVehicle.volume;
    file >> aVehicle.power;
    file >> aVehicle.mileage;
    file.get();
 
    return aVehicle;
}
 
dataTime adataTime(ifstream& file) {
    dataTime adataTime;
    file >> adataTime.year;
    file >> adataTime.month;
    file >> adataTime.day;
    file.get();
 
    return adataTime;
}
 
void print_Vehicle(Vehicle aVehicle) {
    cout << "Имя и фамилия владельца: ";
    cout << aVehicle.owner;
    cout << aVehicle.ownerName;
    cout << "Рег. номера владельца: ";
    cout << aVehicle.reg_number;
    cout << "Марка автомобиля владельца: ";
    cout << aVehicle.type;
    cout << "Тип автомобиля владельца: ";
    cout << aVehicle.type;
    cout << "Объем двигателя автомобиля: ";
    cout << aVehicle.volume;
    cout << "Мощность автомобиля: ";
    cout << aVehicle.power;
    cout << "Пробег автомобиля: ";
    cout << aVehicle.mileage;
}
 
void print_adataTime(dataTime adataTime) {
    cout << adataTime.year << adataTime.month << adataTime.day;
}
 
string InputString()
{
    string a;
    while (true)
    {
        cin >> a;
        if (cin.fail())
        {
            cout << "Попробуйте снова:\n";
            cin.clear();
            cin.ignore(32767, '\n');
        }
        else
        {
            break;
        }
    }
    return a;
}
int InputInt()
{
    int a;
    while (true)
    {
        cin >> a;
        if (cin.fail())
        {
            cout << "Попробуйте снова:\n";
            cin.clear();
            cin.ignore(32767, '\n');
        }
        else
        {
            break;
        }
    }
    return a;
}
float InputFloat()
{
    float a;
    while (true)
    {
        cin >> a;
        if (cin.fail())
        {
            cout << "Попробуйте снова :\n";
            cin.clear();
            cin.ignore(32767, '\n');
        }
        else
        {
            break;
        }
    }
    return a;
}
 
//проверка пробега свыше 100к
void Probeg100k(Vehicle arr[], int kolvo)
{
    for (int i = 0; i < kolvo; i++)
    {
        if (arr[i].mileage > 100000)
        {
            cout << "\nРег. номера автомобилей, которые имею пробег свыше 100 тыс. км: \n";
            cout << arr[i].reg_number << endl;
        }
    }
}
//проверка прохождения ТО
void ToCheck(Vehicle arr[], int kolvo) //проверка года и месяца
{
    for (int i = 0; i < kolvo; i++)
    {
        if (arr[i].last_to.year == 2022 && arr[i].last_to.month == 8)
        {
            cout << "\nФамилии владельцев автомобилей, которые прошли ТО за последний месяц: \n";
            cout << arr[i].owner;
        }
    }
 
}
Vehicle* collection;
//ввод данных об автомобиле 
Vehicle VvodMashini()
{
    int hN;
    dataTime infData;
    Vehicle cars;
    ifstream infile;
    infile.open("1.txt");
 
    cout << "\nВведите владельца автомобиля: \n";
    cout << "Введите фамилию: " << endl;
    infile >> cars.owner;
    cout << "Введите имя владельца" << endl;
    infile >> cars.ownerName;
    cout << "\nВведите рег. номера автомобиля: \n";
    infile >> cars.reg_number;
    cout << "\nВведите марку автомобиля: \n";
    infile >> cars.brand;
    cout << "\nВведите тип автомобиля. 0 - легковой автомобиль; 1 - грузовой автомобиль: \n";
    while (true)
    {
        infile >> cars.type;
        if (cin.fail())
        {
            cout << "Попробуйте снова: \n";
            cin.clear();
            cin.ignore(32767, '\n');
        }
        else
        {
            break;
        }
    }
    //int kolvoAvto;
    //collection = new Vehicle[kolvoAvto];
    //infData.ownerData = cars.owner;
 
    //ввод физических данных об авто
    cout << "\nВведите объем двигателя машины: \n";
    int OB;
    float floatOB;
    for (OB = 1; OB != 0; OB++) {
        cin >> floatOB;
 
        if (floatOB > 0 & floatOB < 12) {
            cars.volume = floatOB;
            break;
        }
 
        else {
            cout << "Введите корректное значение объема двигателя! Попробуйте снова: " << endl;
        }
    }
 
    cout << "\nВведите мощность двигателя машины: \n";
    int rC;
    float pwrC;
    for (rC = 1; rC != 0; rC++) {
        cin >> pwrC;
 
        if (pwrC > 20 & pwrC < 1500) {
            cars.power = pwrC;
            break;
        }
 
        else {
            cout << "Введите корректное значение мощность двигателя! Попробуйте снова: " << endl;
        }
    }
 
    //вводы даты
    cout << "\nВведиие дату ТО: \n";
    int d;
    int dataGOD, dataMES, dataDAY;
    
    //вводим данные о годе
    cout << "Введите ГОД в котором проходиле ТО:" << endl;
    for (d = 1; d != 0; d++) {
        infile >> infData.year;
 
        if (infData.year < 2023 & infData.year > 1900) {
            //cars.last_to.year = dataGOD;
            //infData.year = dataGOD;
            break;
        }
 
        else {
            cout << "\nВведите корректное значение! Попробуйте снова : \n" << endl;
        }
 
    }
 
    //вводим данные о месяце
    cout << "Введиие МЕСЯЦ в котором проходили ТО:" << endl;
    int m;
    for (m = 1; m != 0; m++) {
        infile >> infData.month;
 
        if (infData.month <= 12 & infData.month > 0) {
            //cars.last_to.month = dataMES;
            //cars.last_to.month -= 1;
            //dataMES -= 1;
            //infData.month = dataMES;
            break;
        }
 
        else {
            cout << "\nВведите корректное значение! Попробуйте снова : \n" << endl;
        }
 
    }
 
    //вводим данные о дне 
    int l;
    cout << "Введите ДЕНЬ в который проходили ТО:" << endl;
    for (l = 1; l != 0; l++) {
        infile >> infData.day;
 
        if (infData.day <= 31 & infData.day > 0) {
            //cars.last_to.day = dataDAY;
            //infData.day = dataDAY;
            break;
        }
 
        else {
            cout << "\nВведите корректное значение! Попробуйте снова : \n" << endl;
        }
 
    }
 
    cout << "\nВведите пробег машины: \n";
    infile >> cars.mileage;
    //int pop;
    //cin >> pop;
    //cars.mileage = pop;
    return cars;
}
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Функция setlocale() с аргументами
    ifstream infile;
    infile.open("1.txt");
 
    Vehicle cars[5];
    dataTime Data;
    int kolvoAvto1, k;
    cout << "Сколько автомобилей?\n";
    //проверяем корректность ввода данных о кол-ве авто
 
    for (k = 1; k != 0; k++) {
 
        cin >> kolvoAvto1;
        //k == kolvoAvto;
 
 
        if (kolvoAvto1 > 0 && kolvoAvto1 < 21) {
            cout << "Введите данные об автомобиле и владельце: " << endl;
            for (int i = 0; i < kolvoAvto1; i++)
            {
                cout << "Автомобиль #" << i + 1 << endl;
                cars[i] = VvodMashini();
            } break;
        }
        else {
            cout << "Вы ввелие не корректное значение! Ограничение 20 мест для автомобилей. Попробуйте снова: " << endl;
        }
    }
 
    //выбор задания для выведения на экран
    cout << "Выберите номер задания, чтобы вывести его решение: " << endl;
    cout << "1 - Первое задание" << endl;
    cout << "2 - Второе задание" << endl;
        cout << "3 - " << endl;
        cout << "4 - " << endl;
    cout << "0 - Закончить выполнение программы" << endl;
 
    int vibor, z, hN, hi, hM;
 
    for (z = 1; z != 0; z++) {
 
        cin >> vibor;
        //z == vibor;
        if (vibor == 1) {
            Probeg100k(cars, kolvoAvto1);
        }
        if (vibor == 2) {
            ToCheck(cars, kolvoAvto1);
        }
        if (vibor == 3) {
            for (int i = 0; i < kolvoAvto1; i++) {
                collection[kolvoAvto1] = read_Vehicle(infile);
                infile.close();
            }
        }
        if (vibor == 4) {
            for (int i = 0; i < kolvoAvto1; i++) {
                print_Vehicle(collection[kolvoAvto1]);
        
            }
        }
        if (vibor == 0) {
            cout << "Конец выполнения программы..." << endl;
            break;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2022, 15:50
Ответы с готовыми решениями:

Ввод строки символов с клавиатуры, а вывод через текстовый видеобуфер
Помогите составить программу! программа в которой осуществляется ввод строки символов с...

Ввод-вывод, потоки
Где лучше всего описано, как работает система вводы-вывода в C++ и что такое потоки? И желательно...

Ввод\вывод из файла (потоки)
нужна помощь. не могу понять в чем проблема. вводим данные.все данные сохраняем в файл. после...

Потоки. Бинарный ввод/вывод
Нужно написать бинарный вывод в файл. По учебнику вроде бы что-то в этом роде: ofstream...

Потоки данных. Ввод-вывод. Java 2
Следует модифицировать программу-шаблон, преобразующую файл с двоичными данными в текстовую форму,...

0
22.10.2022, 15:50
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2022, 15:50
Помогаю со студенческими работами здесь

Байтовые и символьные потоки. Ввод-вывод
здраствуйте, сегодня на программирование начали изучать работы с файлами, понял как читать и...

Java 2 Байтовые и символьные потоки. Ввод-вывод
Изменить программу, поместив в строку 13 операторы,которые меняют местами второй и третий биты...

Потоки. Ввод-вывод. Ошибка на этапе компиляции.
#include &lt;windows.h&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace...

Написать программу, выполняющую поэкранный вывод текстового файла (текстовый и бинарный файловый ввод/вывод)
Я в этом языке новичок и ужасно нужна помощь. Суть задачи такова: Разработать программу,...

Стандартные системные потоки ввода и вывода. консольный и файловый ввод - вывод
1.Разработать программный код для кодирования и декодирования фрагмента текста текст Выходной...

Стандартные системные потоки ввода и вывода. консольный и файловый ввод - вывод
1.Разработать программный код для кодирования и декодирования фрагмента текста текст Выходной...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru