У меня есть переменная типа char с названием entrance, пользователь должен ввести Y/N , в случае если вводится что-то иное, надо вывести сообщение об некорректности введенных данных и попросить ввести еще раз, до тех пор, пока не будет введено Y/N или y/n. У меня цикл сообщение об ошибке почему - то выводит столько, сколько неверных символов я введу, и не могу понять почему так.
Вот сам код:
char entrance;
cin >> entrance;
while((entrance != 78) && (entrance != 110) && (entrance != 89) && (entrance != 121))
{
cout << "Неверный ввод! Следует ввести Y/N, попробуйте еще раз:";
cin >> entrance;
cout << "" << endl;
}
Вообще я даже не уверен в правильности такого подхода, это лишь маленькая часть большого задания по ООП. Нужно составить программу, для бронирования отеля и вот эта маленькая часть кода отвечает за продолжение работы программы, в зависимости от ввода данных.
Потому что в переменную entrance
присваивается только первый символ,все остальные остаются в буфере входного потока и вставляются без вашего спроса,когда будет в следующий раз вызываться cin
и подобные ей функции ввода.
Дабы лучше все это понять можете проверить,как работает программа:
#include <iostream>
using namespace std;
int main()
{
cin.get();
cin.get();
}
Если введено более одного символа,то следующий cin.get()
не будет ждать ввода пользователя,а возьмет символ из буфера входного потока.При чем это не отобразится в консоли.Кстати,Enter тоже является символом.
В вашем случае можно обойтись и goto, хотя многие говорят, что это плохой тон, но если руки прямые, то никаких проблем с этим не будет. Это обычный jmp код в ассемблере. Используется очень просто, создается label, куда мы можем в дальнейшем прыгать с помощью goto
Простой пример: если клиент вводит значение <= 0, то мы прыгаем в участок кода ErrorGO, где у нас повторно запрашивается ввод
void foo()
{
int testvalue = 0;
ErrorGO:
std::cin >> testvalue
if(testvalue <= 0)
goto ErrorGO;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»