gpt4 book ai didi

c++ - 为什么 while 循环会无限重复?

转载 作者:太空狗 更新时间:2023-10-29 23:49:58 27 4
gpt4 key购买 nike

我想提示用户输入一个整数,但如果用户输入一个非整数,程序应该一直要求输入一个整数,直到用户同意为止。

int getInteger(){
int input;

do{
std::cout << "Enter an integer: ";
std::cin >> input;
} while(!(std::cin));


return input;
}

如果用户输入一个整数,该函数将返回它。

但如果用户输入类似“Hello”的内容,该函数将无限期地执行,cout-ing“输入一个整数:”。

我该如何解决这个问题?

最佳答案

!(std::cin)

如果 std::cin 处于错误状态,则计算结果为真,例如输入操作失败后。那么,所有后续的输入操作都会立即失败,并且不会改变cin的错误状态,从而陷入死循环。

为了得到你想要的行为,你可以使用类似的东西

while (!(std::cin >> input)) {
std::cout << "Try again\n";
// Clear away the error state
std::cin.clear();
// Ignore what ever garbage is still in the stream
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

在现实世界中,您可能希望处理(通常不可恢复的)失败eof(有人发送了文件结束字符)和bad( cin 被破坏,不应该发生)不同于在无效输入后发生的 fail。例如,这显示在 this reference page 上对于忽略。但是,这不应该像您的玩具程序那样对您不利。

关于c++ - 为什么 while 循环会无限重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982373/

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