gpt4 book ai didi

c++ - 当我请求一个数字但用户输入了一个非数字时,如何防止失控的输入循环?

转载 作者:太空狗 更新时间:2023-10-29 19:42:32 25 4
gpt4 key购买 nike

我需要知道如何使我的 cin 语句在输入错误类型时不会出现“删除”自身。代码在这里:

int mathOperator()
{
using namespace std;

int Input;
do
{
cout << "Choose: ";
el();
cout << "1) Addition";
el();
cout << "2) Subtraction";
el();
cout << "3) Multiplication";
el();
cout << "4) Division";
el();
el();
cin >> Input;

}
while (Input != 1 && Input != 2 && Input!=3 && Input!=4);
return Input;
}

执行,输入,例如,一个字符,它会不停地循环,就好像 cin 语句不存在一样。

最佳答案

您必须检查输入是否成功并在不成功时进行处理:

int mathOperator() {
using namespace std;

int Input;
do {
cout << "Choose: ";
el();
cout << "1) Addition";
el();
cout << "2) Subtraction";
el();
cout << "3) Multiplication";
el();
cout << "4) Division";
el();
el();
while (!(cin >> Input)) { // failed to extract
if (cin.eof()) { // testing eof() *after* failure detected
throw std::runtime_error("unexpected EOF on stdin");
}
cin.clear(); // clear stream state
cin.ignore(INT_MAX, '\n'); // ignore rest of line
cout << "Input error. Try again!\n";
}
} while (Input != 1 && Input != 2 && Input!=3 && Input!=4);
return Input;
}

如果您不检查提取是否成功,则 cin 将处于失败状态 (cin.fail())。一旦处于失败状态,以后的提取将立即返回,而不是尝试从流中读取,从而有效地使它们成为空操作——导致无限循环。

关于c++ - 当我请求一个数字但用户输入了一个非数字时,如何防止失控的输入循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865561/

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