gpt4 book ai didi

c++ - while 循环 - 第一次输入后没有任何反应

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:38 24 4
gpt4 key购买 nike

int option;
int invalidOption2 = 0;

while(invalidOption2 == 0){
try{
cin>>option;
if(!cin){
error("invalid input");
}
if(option<1 || option>2){
error("invalid input");
}
if(option==1) {
invalidOption2 = 1;
cout<<"option 1 was selected"<<endl;
}
else if(option==2) {
invalidOption2 = 1;
cout<<"option 2 was selected"<<endl;
}
}
catch(runtime_error& e) {
cerr <<"Please enter a valid option" << endl;
}
}

当使用上面的代码时,对于我输入的第一个值,它将移到下一行并等待另一个输入,而不是显示选项消息或错误消息。但是,当我输入第二个值时,它会正常工作。

例如如果我输入

a(这里没有任何反应,所以我需要输入另一个值)

1

“你选择了选项1”

将显示原始无效输入并且没有错误消息。

我想知道如何获得下面的结果。

一个

“请选择一个有效的选项”

1

“你选择了选项1”

任何帮助将不胜感激

最佳答案

您不会到达 "Please enter a valid option"除非一个抛出异常。你不显示 error , 但如果不是抛出异常,您将永远无法到达 catch block 。

此外,cin >> option几乎肯定会在缓冲区,这可能会导致以后出现问题,并且当您输入阿尔法,如果option类型是 int , cin会输入错误状态,需要清除(和错误的输入删除)。所以在错误情况下( !cin ),你需要调用 cin.clear() ,在所有情况下,你可能想打电话 cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n'
)
.

另一种解决方案可以避免大多数这些问题,它是阅读完整的行(使用 std::getline( std::cin, line ) ),然后使用 std::istringstream解析行。这会离开std::cin状态良好,准备输入下一步行。

关于c++ - while 循环 - 第一次输入后没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644648/

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