Вы можете использовать тип данных «char» в качестве ввода от пользователя, а затем использовать «static_cast (« имя переменной »);
char input;
int choose;
cin >> input;
choose = static_cast<int>(choose) - 48;///then use 'if' statement with the variable 'choose'
Когда вы вводите букву, устанавливается состояние ошибки cin
, и до вызова cin.clear()
не будет никакого дополнительного ввода. В результате инструкция cin >> num1
не изменит значение num1
, и вы навсегда зацикливаетесь.
Попробуйте следующее:
while (num1 < 0)
{
cout << "The number you entered is negative.\nPlease enter a positive number to continue.\n";
cin.clear();
cin >> num1;
}
EDIT:
Благодаря Легкости для указания этого. Вы также должны инициализировать num1
:
int num1=-1, num2, total;
num1
не инициализируется, поэтому запись в письме не гарантирует запуск этого цикла.
– Lightness Races in Orbit
22 October 2013 в 16:01
num1
на 0
при ошибке ( или делают это?! ), но это не гарантируется.
– Lightness Races in Orbit
22 October 2013 в 16:06
>>
после очистки, снова установив ошибку. Вам нужно каким-то образом синхронизировать входные данные.
– James Kanze
22 October 2013 в 16:06
>>
(для числовых значений) не изменил назначение. В C ++ 11 гарантируется, что он установит значение 0 для ошибки формата и +/- максимальное значение для переполнения.
– James Kanze
22 October 2013 в 16:10
Этот ответ должен решить вашу проблему. В основном вы пытаетесь прочитать символ из потока, и он не может быть разобран на int, поэтому поток остается в состоянии ошибки.
Вы должны проверить наличие ошибки, очистить ее и реагировать соответственно. [/ д2]
Так работает basic_istream
. В вашем случае, когда cin >> num1
получает неправильный ввод - failbit
установлен, а cin
не очищается. Поэтому в следующий раз это будет тот же самый неправильный ввод. Чтобы справиться с этим правильно, вы можете добавить проверку правильного ввода и очистить & игнорировать cin
в случае неправильного ввода. Например:
#include<limits>
//user enters a number
cout << "\nPlease enter a positive number and press Enter: \n";
do {
while(!(cin >> num1)) {
cout << "Incorrect input. Please try again.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n";
} while(num1 < 0);