Необходимо создать структуру, которая содержит элемент типа int
и строку. Объявить указатель типа структуры (объект структуры) и выделить память для хранения данных одной структуры. Предложить пользователю внести данные и записать их в элементы объекта структуры. Далее пользователю необходимо сделать выбор: внести еще данные (создать еще один объект структуры) либо выйти из программы. Если пользователь продолжает ввод — необходимо выделить новую память для указателя на объект структуры и дописать в нее введенные пользователем новые данные. Цикл выделения новой памяти продолжается, пока пользователь не выберет выход из программы.
Решение примерно так должно выглядеть:
Исходный код программы:
#include <iostream> #include <string.h> using namespace std; struct Data //создание структуры { int year; char name [10]; }; int main() { setlocale(LC_ALL, "rus"); Data *p = new Data[1];//объект структуры int var = 1; //будет хранить выбор пользователя (продолжить или выйти) int size = 1; //размер массива структур while (var) { if(size == 1)//просто вносим данные в 0-е элементы { cout << "Имя: "; cin >> p[size-1].name; cout << "Возраст: "; cin >> p[size-1].year; cout << "Элементы структуры объекта Р: " << p[size-1].name << " " << p[size-1].year << ";\n"; } else//size > 1 { Data *copy = new Data [size-1];//создаем новую структуру для копирования в нее данных for(int i = 0; i < size-1; i++)//копируем данные перед отчисткой памяти объекта р { strcpy(copy[i].name, p[i].name); copy[i].year = p[i].year; } delete [] p; //освобождаем память p = new Data[size]; //выделяем новую память for (int i = 0; i < size-1; i++) // обратное копирование в объект р { strcpy(p[i].name, copy[i].name); p[i].year = copy[i].year; } delete [] copy; //освобождаем память cout << "Имя: ";//дописываем новые введенные данные cin >> p[size-1].name; cout << "Возраст: "; cin >> p[size-1].year; for (int i = 0; i < size; i++)//выводим все данные на экран { cout << i << "-е элементы структуры объекта Р: " << p[i].name << " " << p[i].year << ";\n"; } } size++;//счетчик +1 cout << "\nВнести еще данные - 1, выход - 0: "; cin >> var; while(var != 0 && var != 1)//если пользователь ввел не 0 и не 1 { cout << "Ошибка ввода!\n"; cout << "\nВнести еще данные - 1, выход - 0: "; cin >> var; } } delete [] p;//освобождение памяти перед завершением работы программы return 0; }
Вот пример работы программы:
Имя: Alina
Возраст: 22
Элементы структуры объекта Р: Alina 22;
Внести еще данные — 1, выход — 0: 1
Имя: Danila
Возраст: 30
0-е элементы структуры объекта Р: Alina 22;
1-е элементы структуры объекта Р: Danila 30;
Внести еще данные — 1, выход — 0: 1
Имя: Fagot
Возраст: 34
0-е элементы структуры объекта Р: Alina 22;
1-е элементы структуры объекта Р: Danila 30;
2-е элементы структуры объекта Р: Fagot 34;
Внести еще данные — 1, выход — 0: 0
Для продолжения нажмите любую клавишу . . .
Комментарии
Alexander Trousevich
Alex Pir
Ребят помогите плиз у меня проблема из чисткой памяти, вот код (Не судите строго ,я только начинающий):
#include <iostream>
using namespace std;
int main()
{
int size = 1;
int *arr = new int[size] {};
int *arr2 = new int[size + 1];
int a;
cin >> a;
for (int l = 0; a >= 0; l++)
{
cout << «Enter value: «;
cin >> a;
cout << «Array: «;
for (int i = 0; i < size + l; i++)
{
arr2[i] = arr[i];
arr2[l] = a;
arr[i] = arr2[i];
cout << arr2[i] << «\t»;
}
cout << endl;
}
}
Dentchik 2016(Just Do it)