Извините, если это простой вопрос, я новичок.Я хочу быть в состоянии очистить ввод от Cin, если это не ожидаемый тип.У меня это работает для одного символа или значения, но проблема возникает, когда я ввожу более одного символа в строке.
Например, пользователю предлагается двойное значение.Если это не двойное, я получаю сообщение об ошибке и повторяю.Это также должно произойти, если я введу более длинную строку.
EX 1: ожидаемый результат
Enter initial estimate: a
The initial estimate is not a number.
Enter initial estimate: afdf
The initial estimate is not a number.
EX 2: В моем коде в настоящее время afdf постоянно читается, поэтому я получаю:
Enter initial estimate of root : a
The initial estimate was not a number
Enter initial estimate of root : afdf
The initial estimate was not a number
Enter initial estimate of root :
The initial estimate was not a number
Enter initial estimate of root :
The initial estimate was not a number
Enter increment for estimate of root :
The increment was not a number
Я попытался использовать cin.clear () и cin.get (), а также посмотрел на getline (), но это не сработало.
while (numTries < 4)
{
numTries++;
cout << "Enter initial estimate of root : ";
cin >> estimate;
if (!(cin.fail()))
{
if ((estimate >= minEst) && (estimate <= maxEst))
{
break;
}
else
{
if (numTries == 4)
{
cout << "ERROR: Exceeded max number of tries entering data" << endl;
return 0;
}
cout << "" << endl;
cout << "Value you entered was not in range\n";
cout << fixed << setprecision(3) << minEst << " <= initial estimate <= " << maxEst << endl;
}
}
else
{
cout << "\nThe initial estimate was not a number\n";
cin.clear();
cin.get();
}
}
Как я могу убедитьсяввод очищается при следующем вводе?Могу ли я использовать getline () для достижения этой цели?Заранее спасибо.