当我运行这个程序时,我的输出只是我的cout循环。好像现在正在跳过cin?有没有人知道为什么会这样?
TryAgain:
cout<<"\nEnter a number greater than 1 and less than 100: "; // 21 - Request a Number
cin>>num; // 22 - Store the number
if (cin.fail()) {
cout << "Please enter a number!\n\n";
goto TryAgain;
}
if (num<=1){ // 24 - IF NUMBER IS BELOW 1
cout<<"Oh no, " << num << " is too small!\n\n"; // 25 - Print Error Message
return 0;
}
if (num>=100){ // 29 - IF NUMBER IS OVER 100
cout<<"Oh no, " << num << " is too large!\n\n"; // 30 - Print Error Message
return 0;
}
else if (isprime(num)){ //Call isprime // 34 - IF ISPRIME IS TRUE
cout << "True, " << num << " is a prime number!!\n\n"; // 35 - Print True Message
}
else{ // 38 - IF ISPRIME OS FALSE
cout << "False, " << num << " is not a prime number!!\n\n"; // 39 - rint False Message
}
答案 0 :(得分:3)
当cin
失败时,它将进入错误状态,导致它始终失败。您需要清除该错误状态。
cin.clear();
如果您要再次执行相同的输入操作,还需要删除(至少部分)先前输入的数据,否则cin
将再次失败。
cin.ignore(numeric_limits<streamsize>::max(), '\n');
答案 1 :(得分:2)
你必须使用std :: cin的两个成员函数:ignore和clear。例如
#include <limits>
//...
if (cin.fail()) {
cout << "Please enter a number!\n\n";
cin.clear();
cin.ignore( numeric_limits<streamsize>::max() );
goto TryAgain;
}
使用goto语句也是一个坏主意。你可以写
do
{
if ( !cin )
{
cin.clear();
cin.ignore( numeric_limits<streamsize>::max() );
}
cout<<"\nEnter a number greater than 1 and less than 100: ";
cin>>num;
} while ( !cin );