This is how basic_istream
works. In your case when cin >> num1
gets wrong input - failbit
is set and cin
is not cleared. So next time it will be the same wrong input. To handle this correctly you can add check for correct input and clear&ignore cin
in case of wrong input. For example:
#include<limits>
//user enters a number
cout << "
Please enter a positive number and press Enter:
";
do {
while(!(cin >> num1)) {
cout << "Incorrect input. Please try again.
";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '
');
}
if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.
";
} while(num1 < 0);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…