Необходимо создать структуру, которая содержит элемент типа 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
// Language: rust. Details: rust-lang.org use std::io; fn read_integer(prompt: String) -> u32 { println!("{}", prompt); let mut buf: String = String::new(); io::stdin().read_line(&mut buf).expect("Invalid Input"); buf.trim().parse().expect("Not a number") } fn read_string(prompt: String) -> String { println!("{}", prompt); let mut buf: String = String::new(); io::stdin().read_line(&mut buf).expect("Invalid Input"); String::from(buf.trim()) } struct Student { name: String, age: u32 } impl Student { fn new() -> Student { Student { name: String::from("Unknown"), age: 0 } } fn description(&self) -> String { return format!("{}, {}", self.name, self.age); } } fn main() { let mut students: Vec<Student> = Vec::new(); loop { let mut student = Student::new(); student.name = read_string(String::from("Student's Name: ")); student.age = read_integer(String::from("Student's Age: ")); students.push(student); match read_string(String::from("Continue? ( type 'no' for stop and anything else to continue)")).as_str() { "no" => break, _ => {} } } for s in students { println!("{}", s.description()); } }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)
//Опять же можно и так решить , или поясните , почему бы не писать так просто #include<bits/stdc++.h> using namespace std; struct Pupil { char name[30]; int age; }; int main() { bool cont; Pupil* pupils = new Pupil[1]; int c = 0; do { cin >> pupils[c].name >> pupils[c++].age; cin >> cont; }while(cont); for(int i= 0;i < c;i++) { cout << pupils[i].name << " " << pupils[i].age << endl; } delete [] pupils; }