С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1

Динамический массив структур(ввод и вивод)

13.04.2021, 10:59. Показов 1675. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include<iostream>
#include<string>
using namespace std;
struct date1 {
    char* month;
    int year;
};
struct building{ 
    char* owner;
    char* city;
    int amountRooms;
    double price;
    date1 built; 
};
void input(building &object1) {
    cout << "Owner building: ";cin.getline( object1.owner,250);
    cout << "Building in city: "; cin.getline( object1.city,250);
    cout << "Rooms count: "; cin >> object1.amountRooms;
    cout << "Price : "; cin >> object1.price;
    cout << "Data building: "; cin.getline(object1.built.month, 250);cin >> object1.built.year;
}
void show(building &object){
    cout <<"Owner building: "<<object.owner <<endl;
    cout <<"Building in city: "<<object.city <<endl;
    cout << "Rooms count:" << object.amountRooms << endl; 
    cout << "Price : " << object.price << " $" << endl; 
    cout << "Data building: " << object.built.month << ' ' << object.built.year << endl;
}
int main(){
    system("chcp 1251 > nul");
    int n;
    cin >> n;
    building* arr =new building[n];
    for (int i = 0; i < n; i++) {
        input(arr[i]);
    }
    for (int i = 0; i < 1; i++) {
        show(arr[i]);
    }
    delete[]arr;
    system("pause>nul");
    return 0;
}
Нашел задания в интернете и хотел попрактикуватися: описать тип Здание struct building с простыми полями char * owner (владелец квартиры) char * city; (Город Расположение) intamountRooms; (Кол-во комнат) doubleprice; (Цена) и полем типа структура для Описания дать сдачи дома data1з двумя полями enum month; (Луна построение дома) int year; (Год) Если не удается enum для месяца построение -використати тип int.Написати Функции для ввода данных, вывода переменной типа struct buildingна екран.Створити Динамический массив размера n типа building. Ну Почему у меня ошибки, кто подскажите как исправить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2021, 10:59
Ответы с готовыми решениями:

Ввод данных в динамический массив структур
Помогите правильно написать функцию - сколь не пробовал, не получается - getinfo(), которая требует ввода данных о студентах. Она...

Динамический массив структур, ввод строки
По заданию нужно создать именно динамический массив структур, используя операцию new. #include &lt;iostream&gt; #include...

Динамический массив структур в другом массиве структур
Можно ли реализовать динамический (или статический) массив структур в другом массиве структур? Пример, пожалуйста.

14
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
13.04.2021, 11:54
Цитата Сообщение от matviiv Посмотреть сообщение
cout << "Owner building: ";cin.getline( object1.owner,250);
Указатели в структурах неинициализированы и указывают непойми-куда, а тут в них писать задмали.
Либо заблаговременно и аккуратно память под них выделять / освобождать, либо, раз уж <string> подключен - не проще ли через строки тогда?
2
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 12:09
matviiv, по-моему вы должны выделить память для всех полей в виде указатели. Посмотрите:
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
#include<iostream>
#include<string>
using namespace std;
struct date1 {
    char* month;
    int year;
};
struct building {
    char* owner;
    char* city;
    int amountRooms;
    double price;
    date1 built;
};
void input(building& object1) {
    cout << "Owner building: "; cin.getline(object1.owner, 250);
    cout << "Building in city: "; cin.getline(object1.city, 250);
    cout << "Rooms count: "; cin >> object1.amountRooms;
    cout << "Price : "; cin >> object1.price;
    cout << "Data building: "; cin.getline(object1.built.month, 250); cin >> object1.built.year;
}
void show(building& object) {
    cout << "Owner building: " << object.owner << endl;
    cout << "Building in city: " << object.city << endl;
    cout << "Rooms count:" << object.amountRooms << endl;
    cout << "Price : " << object.price << " $" << endl;
    cout << "Data building: " << object.built.month << ' ' << object.built.year << endl;
}
int main() {
    system("chcp 1251 > nul");
    int n;
    cin >> n;
    building* arr = new building[n];
    for (int i = 0; i < n; i++) {
        arr[i].owner = new char[250];
        arr[i].city = new char[250];
        arr[i].built.month = new char[250];
        input(arr[i]);
    }
    for (int i = 0; i < 1; i++) {
        show(arr[i]);
        delete[] arr[i].owner;
        delete[] arr[i].city;
        delete[] arr[i].built.month;
    }
    delete[]arr;
    system("pause>nul");
    return 0;
}
Успехов !
3
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
13.04.2021, 12:20  [ТС]
Volga_, почему-то ошибка Exception thrown at 0x7BFCFF5C (ucrtbased.dll) in Project1.exe: 0xC0000005: Access violation reading location 0xFDFDFDFD.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 12:23
matviiv, что вы вводили ? И где строка с ошибкой ?
1
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
13.04.2021, 12:24  [ТС]
Volga_, сразу,когда запускаю,никакого текста ,если хочу что-то ввести то ошибка
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 12:27
Еще раз с cin.ignore():
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
#include<iostream>
#include<string>
using namespace std;
struct date1 {
    char* month;
    int year;
};
struct building {
    char* owner;
    char* city;
    int amountRooms;
    double price;
    date1 built;
};
void input(building& object1) {
    cout << "Owner building: "; cin.ignore(); cin.getline(object1.owner, 250);
    cout << "Building in city: ";  cin.getline(object1.city, 250);
    cout << "Rooms count: "; cin >> object1.amountRooms;
    cout << "Price : "; cin >> object1.price;
    cout << "Data building: "; cin.ignore(); cin.getline(object1.built.month, 250); cin >> object1.built.year;
}
void show(building& object) {
    cout << "Owner building: " << object.owner << endl;
    cout << "Building in city: " << object.city << endl;
    cout << "Rooms count:" << object.amountRooms << endl;
    cout << "Price : " << object.price << " $" << endl;
    cout << "Data building: " << object.built.month << ' ' << object.built.year << endl;
}
int main() {
    system("chcp 1251 > nul");
    int n;
    cin >> n;
    building* arr = new building[n];
    for (int i = 0; i < n; i++) {
        arr[i].owner = new char[250];
        arr[i].city = new char[250];
        arr[i].built.month = new char[250];
        input(arr[i]);
    }
    for (int i = 0; i < n; i++) {
        show(arr[i]);
        delete[] arr[i].owner;
        delete[] arr[i].city;
        delete[] arr[i].built.month;
    }
    delete[]arr;
    system("pause>nul");
    return 0;
}
2
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
13.04.2021, 12:29  [ТС]
Volga_,
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 12:37
matviiv, в первой строки в консоле надо вводить размерности массива числом, почему вы вводили символ не с числом ???

Добавлено через 3 минуты
Результаты у меня:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
Owner building: abc def
Building in city: ghl
Rooms count: 2
Price : 3
Data building: 15.06
2010
Owner building: kkk lll
Building in city: lhggh
Rooms count: 6
Price : 7
Data building: 20.9
2020
Owner building: abc def
Building in city: ghl
Rooms count:2
Price : 3 $
Data building: 15.06 2010
Owner building: kkk lll
Building in city: lhggh
Rooms count:6
Price : 7 $
Data building: 20.9 2020
2
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
13.04.2021, 12:39  [ТС]
ой точно
0
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
13.04.2021, 12:41  [ТС]
Volga_, почему-то теперь так
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 12:51
Лучший ответ Сообщение было отмечено matviiv как решение

Решение

Цитата Сообщение от matviiv Посмотреть сообщение
почему-то теперь так
Пожалуйста, доделайте лучше при дисплей, например:
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
#include<iostream>
#include<string>
using namespace std;
struct date1 {
    char* month;
    int year;
};
struct building {
    char* owner;
    char* city;
    int amountRooms;
    double price;
    date1 built;
};
void input(building& object1) {
    cout << "\tOwner building: "; cin.ignore(); cin.getline(object1.owner, 250);
    cout << "\tBuilding in city: ";  cin.getline(object1.city, 250);
    cout << "\tRooms count: "; cin >> object1.amountRooms;
    cout << "\tPrice : "; cin >> object1.price;
    cout << "\tData building: "; cin.ignore(); cin.getline(object1.built.month, 250); 
    cout << "\tYear building: "; cin >> object1.built.year;
}
void show(building& object) {
    cout << "\tOwner building: " << object.owner << endl;
    cout << "\tBuilding in city: " << object.city << endl;
    cout << "\tRooms count:" << object.amountRooms << endl;
    cout << "\tPrice : " << object.price << " $" << endl;
    cout << "\tData building: " << object.built.month << ' ' << object.built.year << endl;
}
int main() {
    system("chcp 1251 > nul");
    int n;
    cout << "n = ";
    cin >> n;
    cout << endl;
    building* arr = new building[n];
    for (int i = 0; i < n; i++) {
        arr[i].owner = new char[250];
        arr[i].city = new char[250];
        arr[i].built.month = new char[250];
        cout << "Enter for element " << i + 1 << endl;
        input(arr[i]);
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        cout << "Element " << i + 1 << endl;
        show(arr[i]);
        delete[] arr[i].owner;
        delete[] arr[i].city;
        delete[] arr[i].built.month;
    }
    delete[]arr;
    system("pause>nul");
    return 0;
}
Тест:
Code
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
n = 2
 
Enter for element 1
        Owner building: gfg
        Building in city: rtr
        Rooms count: 5
        Price : 6
        Data building: 16.5
        Year building: 2010
Enter for element 2
        Owner building: rtr
        Building in city: hjhj
        Rooms count: 5
        Price : 6
        Data building: 30.7
        Year building: 2034
 
Element 1
        Owner building: gfg
        Building in city: rtr
        Rooms count:5
        Price : 6 $
        Data building: 16.5 2010
Element 2
        Owner building: rtr
        Building in city: hjhj
        Rooms count:5
        Price : 6 $
        Data building: 30.7 2034
2
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
13.04.2021, 12:58
Пример, конечно, наглядный, но не безопасный. Шаг влево, шаг вправо – расстрел. Думал как по-хорошему бы, т.е. закрывать управление памяти внутрь, конструкторы копирования и прочий зоопарк. Потом думаю, а зачем мне этот зоопарк для трёх одинаковых штук в двух разных структурах? А не вывести ли эти штуки в отдельное... Алле гоп! И мы уже пишем эрзац std::string
2
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.04.2021, 13:13
Цитата Сообщение от Folian Посмотреть сообщение
И мы уже пишем эрзац std::string
Вроде он хочет изучать как работать с памятью ! Вначале я тоже хочу советовать делать string, но боюсь острых оценок из несколько человек ! Вот, хотя мой код выше по-моему очень безопасно, но с вашими советами я сделал так как дополнительный вариант:
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
#include<iostream>
#include<string>
using namespace std;
struct date1 {
    string month;
    int year;
};
struct building {
    string owner;
    string city;
    int amountRooms;
    double price;
    date1 built;
};
void input(building& object1) {
    cout << "\tOwner building: "; cin.ignore(); getline(cin, object1.owner);
    cout << "\tBuilding in city: ";  getline(cin, object1.city);
    cout << "\tRooms count: "; cin >> object1.amountRooms;
    cout << "\tPrice : "; cin >> object1.price;
    cout << "\tData building: "; cin.ignore(); getline(cin, object1.built.month);
    cout << "\tYear building: "; cin >> object1.built.year;
}
void show(building& object) {
    cout << "\tOwner building: " << object.owner << endl;
    cout << "\tBuilding in city: " << object.city << endl;
    cout << "\tRooms count:" << object.amountRooms << endl;
    cout << "\tPrice : " << object.price << " $" << endl;
    cout << "\tData building: " << object.built.month << " " << object.built.year << endl;
}
int main() {
    system("chcp 1251 > nul");
    int n;
    cout << "n = ";
    cin >> n;
    cout << endl;
    building* arr = new building[n];
    for (int i = 0; i < n; i++) {
        cout << "Enter for element " << i + 1 << endl;
        input(arr[i]);
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        cout << "Element " << i + 1 << endl;
        show(arr[i]);
    }
    delete[]arr;
    system("pause>nul");
    return 0;
}
3
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
13.04.2021, 14:42
Цитата Сообщение от Volga_ Посмотреть сообщение
Вроде он хочет изучать как работать с памятью !
Не спорю. Я имел в виду немного другое, меня неправильно поняли.
Цитата Сообщение от Volga_ Посмотреть сообщение
мой код выше по-моему очень безопасно
В качестве демонстрации тут он работает, но в других условиях такие структуры могут сломаться.
Например:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct A
{
    char * str;
};
 
int main()
{
    A* a = new A;
    a->str = new char[20];
    std::strcpy(a->str, "first");
    std::cout << a->str; // first
 
    A b = *a;
    std::strcpy(b.str, "second");
 
    std::cout << "\n" << a->str; // second


Всё что написал выше - это лишь размышления как такого избежать и сделать более правильно, из которых вышло сначала что-то такое
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct X
{
    char * str;
 
    /*
    *Rule of 5
    * 
    * memory manager
    */
};
 
struct A
{
    char * str;
    X x;
 
    /*
    *Rule of 5
    * 
    * memory manager
    */
};
, а потом такое
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct MyString /*WOW*/
{
    char * str;
        /*
    *Rule of 5
    * 
    * memory manager
    */
};
 
struct X
{
    MyString str;
};
 
struct A
{
    MyString str;
    X x;
};


Просто забавный факт, что для того чтобы сделать всё красиво естественным образом получается что придётся сделать свой заменитель std::string

Про настоящий std::string я уже упомянул в #2, в #13 имел в виду самодельный.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2021, 14:42
Помогаю со студенческими работами здесь

Сделать динамический массив структур, причем в структуре так же существует динамический массив
Добрый день. Есть такая пзадача: нужно сделать динамический массив структур, причем в структуре так же существует динамический массив....

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

Динамический массив структур
Создаю структуру, выделяю память под указатель на массив таких структур, размер задается при вводе. #include &lt;iostream&gt; #include...

Динамический массив структур
Структура «Сотрудник» хранит имя, должность и возраст сотрудника. Структура «Компания» хранит название и массив сотрудников. Программа...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru