Новое в 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());
Вы должны использовать 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);
сработало следующее:
do {
if (cin >> customers >> chairs)
break;
if (cin.fail())
{
cout << "Invalid input." << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
} while (true);
благодаря Тони Д