Ввод строк в цикле C++
#include <iostream>
using namespace std;
const int SLEN = 30;
struct student
{
char fullname[SLEN];
char hobby[SLEN];
int ooplevel;
};
int getinfo(student pa[], int n);
void display1(student st);
void display2(const student *ps);
void display3(const student [], int n);
int main()
{
cout << "Enter class size: ";
int class_size;
cin >> class_size;
while(cin.get() != '\n'){
continue;
}
student *ptr_stu = new student[class_size];
int entered = getinfo(ptr_stu, class_size);
for (int i = 0; i < entered; i++)
{
display1(ptr_stu[i]);
display2(&ptr_stu[i]);
}
display3(ptr_stu, entered);
delete [] ptr_stu;
cout << "Done\n";
return 0;
}
int getinfo(student pa[], int n)
{
int sum = 0;
for(int i = 0; i < n; i++)
{
cout << "Enter your name: ";
cin.getline(pa->fullname, 30);
cout << "Enter your hobby: ";
cin.getline(pa->hobby, 30);
cout << "Enter your ooplevel: ";
cin >> pa->ooplevel;
cin.get();
sum++;
}
return sum;
}
void display1(student st)
{
cout << "Name: " << st.fullname << endl;
cout << "Hobby: " << st.hobby << endl;
cout << "Ooplevel: " << st.ooplevel << endl;
}
void display2(const student *ps)
{
cout << "Name: " << ps->fullname << endl;
cout << "Hobby: " << ps->hobby << endl;
cout << "Ooplevel: " << ps->ooplevel << endl;
}
void display3(const student pa[], int n)
{
for(int i = 0; i < n; i++)
{
cout << "Name: " << pa[i].fullname << endl;
cout << "Hobby: " << pa[i].hobby << endl;
cout << "Ooplevel: " << pa[i].ooplevel << endl;
}
}
Здраствуйте я написал этот код для того чтобы она просила ввод через функцию и показала структуры через функции с другими способами показа(из книги упражнения) ну вот проблема в том что я пишу до определенной части и потом ввод сразу прекращается и я не могу полностью написать значения в массив структур и потом показывает содержимое а в содержимом непонятные строки по типу локация файла, вот и все я проверял код 5 раз все вроде бы норм, заранее спасибо за вашу помощь, и извините если есть какие тупые ошибки в коде(
Ответы (1 шт):
У Вас в функции ввода все значения вводятся в нулевой элемент pa[0]. Т.е. cin >> pa->ooplevel; то же самое, что и cin >> pa[0].ooplevel;. Каждое следующее значение перезатирает ранее введенное.
Должно быть примерно так:
int getinfo(student pa[], int n)
{
int sum = 0;
for(int i = 0; i < n; i++)
{
cout << "Enter your name: ";
cin.getline(pa[i].fullname, 30);
cout << "Enter your hobby: ";
cin.getline(pa[i].hobby, 30);
cout << "Enter your ooplevel: ";
cin >> pa[i].ooplevel;
cin.get();
sum++;
}
return sum;
}
И зачем подсчитывается количество введенных записей? Количество объектов вводится в начале main(). В функции ввода обработки ошибок неправильного ввода значений нет - т.е. либо будет введено ранее известное кол-во записей, либо программа завершится с ошибкой.