我正在做一个控制台应用程序,我正在向应用程序传递一个整数,它工作正常,但如果我通过一封信,它会发疯,
int opt=0;
std::cout<<"Pick lang:"<<'\n';
std::cout<<"1.[es-ES]:"<<'\n';
std::cout<<"2.[en-US]:"<<'\n';
std::cin >> opt;
while(opt<1 || opt>2)
{
std::cout<<"\nERROR!"<<'\n';
std::cout<<"Pick lang again:"<<'\n';
std::cout<<"1.[es-ES]:"<<'\n';
std::cout<<"2.[en-US]:"<<'\n';
std::cin >> opt;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用isdigit()但我得到了相同的结果.谢谢
执行cin >>提取后,您要检查cin流是否仍然良好.如果你希望cin提取一个数字,但它会得到其他东西,例如.就像一封信,然后流将被设置为一个糟糕的状态,这就是为什么你看到它"变得疯狂".
你需要做的是输入后,检查cin是否仍然良好.如果它处于错误状态,则需要清除其标志,然后删除流中的任何垃圾数据.如果不这样做,那么cin的后续使用将无法正常运行.
以您的代码片段为例,您可以将其更改为以下内容:
int opt = 0;
bool inputGood = false;
do
{
std::cout << "Pick lang again:" << '\n';
std::cout << "1.[es-ES]:" << '\n';
std::cout << "2.[en-US]:" << '\n';
inputGood = std::cin >> opt;
if(!inputGood)
{
std::cout << "\nERROR! Invalid choice." << '\n';
cin.clear();
while( cin.get() != '\n' );
}
}while(!inputGood || opt < 1 || opt > 2);
Run Code Online (Sandbox Code Playgroud)
编辑:在cin错误处理中whoops次要错误.已更正,现在应该正常工作.:)
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |