проверка ввода cin, очистка буфера ввода

Новое в c ++ — пытается проверить формат ввода. Перепробовал все, в конце концов. Любая помощь будет оценена. Я разбил свою проблему на этот основной случай:

while(1) {
cin >> x;
cout << "asked!" << endl;
cin.ignore(1000, 'n');
}

приведет к бесконечному циклу «спросил!» после первого неверного ввода (ввод не int для x). Я хочу обработать неправильный ввод. Следующее не будет работать:

do {
cin.clear();
cin >> x >> y;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

} while (cin.fail());

0

Решение

Вы должны использовать std::cin.clear() непосредственно перед std::cin.ignore() очистить состояние ошибки потока, иначе все будущее cin Операции завершатся / потерпят неудачу. Вы также можете проверить успех std::cin операции более непосредственно …

do {
if (std::cin >> x >> y) break;
std::cout << "Invalid input, please try again...\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (true);
1

Другие решения

сработало следующее:

 do {
if (cin >> customers >> chairs)
break;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');

}

} while (true);

благодаря Тони Д

0

По вопросам рекламы [email protected]