Ввод информации с клавиатуры

160
19 апреля 2018, 11:50

Здравствуйте, перед вами очередная студенческая задача. Хотелось бы узнать принцип работы моего кода, который я не могу понять. Итак, моя задача - ввести имя, фамилию и курс студента с клавиатуры. Проблема в том, что при компиляции 1-го студента вводим как надо, далее программа пропускает имя студента, то есть при переходе на нового студента сразу прога просит фамилию, игнорируя имя, а в готовом варианте имя 2-4 студента - "null".

Вот кусок кода:

Student Nikitos;
cout << "Name of the second student: ";             // имя 2-го студента
getline(std::cin, name);
Nikitos.set_name(name);
cout << "Last name of the second student: ";        // фамилия 2-го студента
getline(std::cin, last_name);
Nikitos.set_last_name(last_name);
cout << "Course of the second student: ";           // курс 2-го студента
cin >> course;
Nikitos.set_course(course);
Nikitos.set_scholarship(1);
Student Dimas;
cout << "Name of the third student: ";          //имя 3-го студента
getline(std::cin, name);
Dimas.set_name(name);
cout << "Last name of the third student: ";     // фамилия 3-го студента
getline(std::cin, last_name);
Dimas.set_last_name(last_name);
cout << "Course of the second student: ";       // курс 3-го студента
cin >> course;
Dimas.set_course(course);
Dimas.set_scholarship(1);
Student Lyov4ik;
cout << "Name of the third student: ";          //имя 3-го студента
getline(std::cin, name);
Lyov4ik.set_name(name);
cout << "Last name of the third student: ";     // фамилия 3-го студента
getline(std::cin, last_name);
Lyov4ik.set_last_name(last_name);
cout << "Course of the second student: ";       // курс 3-го студента
cin >> course;
Lyov4ik.set_course(course);
Lyov4ik.set_scholarship(2);

P.S.: не обращайте внимание, что у меня в коде все начинается со 2-го студента, воспринимайте как с 1-го.

Answer 1

Проблема в том, что вы читаете строку getline(std::cin, last_name); А потом вы читаете только число и после этого опять пытаетесь читать строку:

getline(std::cin, name);

Обьект ввода читает вторую строку. Но там было число которое уже прочитано, а после этого числа ничего нет, вот и переходит читать следующую строку. Короче говоря бедный std::cin запутался от вашего кода... (я сам запутался тоже) Просто замените getline(std::cin, name); на cin >> name; везде

Answer 2

После чтения

 cin >> course;

сбрасывайте остатки буфера ввода

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
READ ALSO
Как удалить динамически созданный LineEdit?

Как удалить динамически созданный LineEdit?

Я хочу иметь возможность удалить добавленный LineEdit

150
Ошибка при компиляции *.sass через Gulp

Ошибка при компиляции *.sass через Gulp

Для проекта нужно сделать компиляцию *sass файлов через gulp

144
Серверный рендеринг React + Django

Серверный рендеринг React + Django

Доброго времени суток, пишу SPA, используя Реакт и Джанго, подружил которые друг с другом с помощью webpack-django-loader и Django REST Framework - Джанго передает...

214