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

Обработка массива структур Doc

15.06.2023, 19:41. Показов 389. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть листинг программы. Она написана, работает безотказно. Но нужно немного подредактировать. Подскажите, пожалуйста)

Листинг:
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
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <windows.h>//Вывод кириллицы в консоли
#include <string>//Работа со строками
#include <locale.h>
#include <windows.h>
using namespace std;
struct AEROFLOT
 
{
char Punkt[100];
string Reis;
char Type[100];
};
void IzFaila(AEROFLOT* m, int n)//Считывает данные из файла
{
ifstream in("tik.txt");
if (!in)
{
cout << "Не могу открыть файл..." << endl;
system("pause");
exit(1);
}
for (int i = 0; i < n; i++)
{
in >> m[i].Punkt >> m[i].Reis >> m[i].Type;
}
}
void Vivod(AEROFLOT* m, int n)//Выводит в консоль,заносит в файл
{
ofstream ou("tok.txt");
cout << "Данные занесены в tok.txt" << endl;
for (int i = 0; i < n; i++)
{
cout << "Пункт назначения : " << m[i].Punkt << endl;
cout << "Рейс: " << m[i].Reis << endl;
cout << "Тип: " << m[i].Type << endl;
cout << "------------" << endl;
ou << "Пункт назначения: " << m[i].Punkt << endl;
ou << "Рейс: " << m[i].Reis << endl;
ou << "Тип: " << m[i].Type << endl;
ou << "-----------" << endl;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
cout << "Ввод N(по условию N=5) " << endl;
cin >> n;
AEROFLOT* m = new AEROFLOT[n];
IzFaila(m, n);
Vivod(m, n);
delete[] m;
system("pause");
return 0;
}


Задание:
Опишите запись с именем типа Doc,
содержащую следующие поля:
• номер строки документа (тип int);
• текст строки (тип string).
Переменную, определяющую запись,
назовите S.
Считать данные из файла в массив из n
элементов.
Организовать вывод в консоль и в файл,
указав названия полей

Добавлено через 1 минуту
Вот по аналогии сделать такую программу надо сделать, как я понял) Заранее Вам огромное спасибо)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2023, 19:41
Ответы с готовыми решениями:

Обработка массива структур
Всем привет. Помогите найти ошибку. Программа должна вывесть имя младшего ребенка если отца зовоут...

Обработка массива структур
Организовать массив структур и поместить в него сведения о нескольких студентах (Фамилия, имя,...

Обработка массива структур
Здравствуйте, вызывается следующая ошибка: Вызвано исключение по адресу 0x0F3AEA12 (ucrtbased.dll)...

Обработка данных в виде массива структур
1. Чтение данных из файла в динамический массив. 2. Просмотр данных, хранящихся в массиве. 3....

Обработка массива структур с определенными полями
Помогите пожалуйста с кодом, буду также благодарен за объяснение на форуме или в комментариях к...

16
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 19:52 2
Цитата Сообщение от Smertn1k Посмотреть сообщение
Опишите запись с именем типа Doc
Цитата Сообщение от Smertn1k Посмотреть сообщение
struct AEROFLOT
Что-то я не понимаю, в задании написано Doc, а у Вас AEROFLOT....
Похоже, это не Ваша программа.
Попробуйте сами по этому образцу написать свою и выкладывайте сюда, что получится.
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 19:53  [ТС] 3
Да, это пример задания. Я понял, что написал неверно. Нужно по аналогии, ток с документом сделать. Это листинг примера

Добавлено через 17 секунд
zss, Написал)
0
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 19:57 4
И что получилось?
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 19:57  [ТС] 5
zss, Это не моя программа. Просто что нужно где изменять? Я вообще не понимаю
0
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 19:58 6
Цитата Сообщение от Smertn1k Посмотреть сообщение
Я вообще не понимаю
Даже, что слово AEROFLOT надо поменять на Doc?
А потом
Цитата Сообщение от Smertn1k Посмотреть сообщение
• номер строки документа (тип int);
• текст строки (тип string).
C++
1
2
3
4
5
struct Doc
{
    int nstr;
    string text;
};
И далее везде вместо
Punkt, Reis, Type;
писать
nstr, text
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 20:08  [ТС] 7
zss, уже понятнее) Сейчас попробую)

Добавлено через 5 минут
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
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <windows.h>//Вывод кириллицы в консоли
#include <string>//Работа со строками
#include <locale.h>
#include <windows.h>
using namespace std;
struct Doc
 
{
char nstr[100];
string text;
 
};
void IzFaila(Doc* m, int n)//Считывает данные из файла
{
ifstream in("tik.txt");
if (!in)
{
cout << "Не могу открыть файл..." << endl;
system("pause");
exit(1);
}
for (int i = 0; i < n; i++)
{
in >> m[i].nstr >> m[i].text;
}
}
void Vivod(Doc* m, int n)//Выводит в консоль,заносит в файл
{
ofstream ou("tok.txt");
cout << "Данные занесены в tok.txt" << endl;
for (int i = 0; i < n; i++)
{
cout << m[i].nstr << endl;
cout << m[i].text << endl;
ou << "Номер строки " << m[i].nstr << endl;
ou << "Текст " << m[i].text << endl;
ou << "-----------" << endl;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n;
cout << "Ввод N (по условию N=5) " << endl;
cin >> n;
Doc* m = new Doc[n];
IzFaila(m, n);
Vivod(m, n);
delete[] m;
system("pause");
return 0;
}
Если пишу с пробелами строку, он переносит на новую строку содержимое после пробела и это считает за новую строчку почему-тоzss,
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 20:12  [ТС] 8
Вот такое выдает. Не подскажете, как исправить?
Миниатюры
Обработка массива структур Doc   Обработка массива структур Doc  
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 20:14  [ТС] 9
Нашел, что nstr должно быть int. Но тогда в листинге ошибка
0
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 20:17 10
Цитата Сообщение от Smertn1k Посмотреть сообщение
как исправить
Цитата Сообщение от Smertn1k Посмотреть сообщение
in >> m[i].nstr >> m[i].text;
заменить на
C++
1
2
getline(in ,m[i].nstr);
getline(in ,m[i].text);
и
Цитата Сообщение от Smertn1k Посмотреть сообщение
char nstr[100];
на
C++
1
string nstr;
Только мне непонятно, почему Вы nstr сделали текстовым.
В задании же ясно написано:
Цитата Сообщение от Smertn1k Посмотреть сообщение
номер строки документа (тип int);
Если исправите на int, то ввод будет такой
C++
1
2
3
in>>m[i].nstr;
in.get();// пропустить символ '\n'
getline(in ,m[i].text);
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 20:19  [ТС] 11
zss, Он пишет номер строки как текст. Вложил результат
Миниатюры
Обработка массива структур Doc  
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 20:27  [ТС] 12
zss, Сейчас вот такое

Листинг:
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
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <windows.h>//Вывод кириллицы в консоли
#include <string>//Работа со строками
#include <locale.h>
#include <windows.h>
using namespace std;
struct Doc
 
{
    int nstr;
    string text;
 
};
void IzFaila(Doc* m, int n)//Считывает данные из файла
{
    ifstream in("tik.txt");
    if (!in)
    {
        cout << "Не могу открыть файл..." << endl;
        system("pause");
        exit(1);
    }
    for (int i = 0; i < n; i++)
    {
        in>>m[i].nstr;
        in.get();// пропустить символ '\n'
        getline(in ,m[i].text);
    }
}
void Vivod(Doc* m, int n)//Выводит в консоль,заносит в файл
{
    ofstream ou("tok.txt");
    cout << "Данные занесены в tok.txt" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << m[i].nstr << endl;
        cout << m[i].text << endl;
        ou << "Номер строки " << m[i].nstr << endl;
        ou << "Текст " << m[i].text << endl;
        ou << "-----------" << endl;
    }
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n;
    cout << "Ввод N (по условию N=5) " << endl;
    cin >> n;
    Doc* m = new Doc[n];
    IzFaila(m, n);
    Vivod(m, n);
    delete[] m;
    system("pause");
    return 0;
}
Миниатюры
Обработка массива структур Doc  
0
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 21:05 13
Лучший ответ Сообщение было отмечено Smertn1k как решение

Решение

А почему Вы в переменную типа int пытаетесь ввести текст?
В 1 строке файла tic.txt написано "шевроле", а не число.
Пример входного файла
3
1
текст 1
2
текст 2
3
текст 3
Число 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
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <windows.h>//Вывод кириллицы в консоли
#include <string>//Работа со строками
//#include <locale.h> не нужно
//#include <windows.h>  повторно
using namespace std;
struct Doc
{
    int nstr;
    string text;
};
void IzFaila(Doc*& m, int& n)//параметры передаются по ссылкам, т.к. они меняются внутри функции
{
    ifstream in("tik.txt");
    if (!in)
    {
        cout << "Не могу открыть файл..." << endl;
        system("pause");
        exit(1);
    }
    in>>n;
    m=new Doc[n];
    for (int i = 0; i < n; i++)
    {
        in>>m[i].nstr;
        in.get();// пропустить символ '\n'
        getline(in ,m[i].text);
    }
    in.close();
}
void Vivod(Doc* m, int n,ostream& ou)//Выводит в поток ou
{
    for (int i = 0; i < n; i++)
    {
        ou << "Номер строки " << m[i].nstr << endl;
        ou << "Текст " << m[i].text << endl;
        ou << "-----------" << endl;
    }
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n;
    Doc* m;
    IzFaila(m, n);
 
    ofstream ou("tok.txt");
    if(ou)
    {
        cout << "Данные занесены в tok.txt" << endl;
        Vivod(m, n,ou);
        ou.close();
    }
    Vivod(m, n,cout);
    delete[] m;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 21:19  [ТС] 14
zss, вот мне как раз этого и не надо. Ща сижу просто каждую строчку разбираю. Не понимаю, почему такое. И не подскажете, что значит "неотформатированный текст"?)

Добавлено через 4 минуты
zss, ааа, так мне и надо. Ведь смотрите. [номер строки] [текст]. Т.е. должно получиться

строка 1 - шевроле
строка 2 - авео
строка 3 - двигатель 1.2
0
Модератор
Эксперт С++
13686 / 10892 / 6469
Регистрация: 18.12.2011
Сообщений: 29,069
15.06.2023, 21:55 15
Цитата Сообщение от Smertn1k Посмотреть сообщение
неотформатированный текст
сравните общий вид текста в сообщении 7 и 12
Какой из них читать легче?
А, например, в Python вообще вместо фигурных скобок только отступы.
0
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 71
15.06.2023, 22:14  [ТС] 16
zss, Спасибо Вам за помощь большое. Завтра понесу отчет на проверку). Да про форматирование текста Code Blocks так записывает бывает калично (не люблю его, но требуют). Вот мне больше в 1С нравится, как текст строится. Я там побольше соображаю, правда давно ничего не делал) Ещё раз спасибо!
0
Эксперт С++
4113 / 1914 / 958
Регистрация: 01.06.2021
Сообщений: 6,746
Записей в блоге: 6
16.06.2023, 00:44 17
Smertn1k, при чем здесь Code::Blocks, если сам программист оформляет калечно? Ну а раз то пошло, то в этой IDE есть мощный плагин AStyle для автоматического форматирования кода. В настройках C::B во вкладке Source Formatter можно выбрать подходящий стиль для кода или даже задать пользовательский. Поэтому нехорошо сваливать вину на эту программу.
0
16.06.2023, 00:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2023, 00:44
Помогаю со студенческими работами здесь

Обработка данных в виде массива структур средствами языка С++
Нужно определить минимальный год издания. Как это сделать? В читаемом файле вот это: Голдинг ...

Использование переменных типа struct. Обработка массива структур
Написать программу для создания массива записей (структур) со сведениями о студентах: ФИО, возраст,...

Обработка массива структур, определить спортсмена занявшего последнее место
Определить тип данных структура, имеющий поля фамилия, страна и результаты шести выступлений....

Обработка массива структур, определить клиента с самой большой задолженностью по кредиту
Создать массив структур из 10-ти элементов: &lt;Номер договора&gt;&lt;Фамилия клиента&gt;&lt;стоимость...

Структуры.Обработка массивов структур.Создать массив структур из 10-ти элементов
Создать массив структур из 10-ти элементов: &lt;Номер договора&gt;&lt;Фамилия клиента&gt;&lt;стоимость...

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран?...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru