gpt4 book ai didi

C++验证数字并停止无限循环

转载 作者:太空狗 更新时间:2023-10-29 23:37:48 25 4
gpt4 key购买 nike

我正在做一个控制台应用程序,我将一个整数传递给应用程序并且它工作正常,但是如果我传递一个字母,它就会变得疯狂,

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;
}

我尝试使用 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);

编辑: 糟糕的是 cin 错误处理中的小错误。已更正,现在应该可以工作了。 :)

关于C++验证数字并停止无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4539640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com