我知道以前曾经问过类似的问题,但我真的无法弄清楚我的代码有什么特别的错误。出于某种原因,如果我输入" n"我必须按两次输入。但是,如果我输入" y",一切正常,代码将移至下一部分。我的代码如下:
do{
try {
if (test) cout << " Re-enter: ";
test = false;
getline(cin, choice);
checkinput(choice);
}
catch (int flag) {
if (flag == 1){ cout << "Error: Input must be y or n."; test = true; }
}
} while (test);
,checkinput功能如下:
// function for checking the input of y/n
string checkinput(string c) {
if (c != "Y" && c != "y" && c != "N" && c != "n") {
throw 1;
}
if (cin.fail()) throw 1;
return c;
}
答案 0 :(得分:0)
我认为你在这里做的太多了。你可以简化这个。
无需在checkinput
内抛出和捕获异常。由于只有两种情况,您可以使用布尔值。其次,你要回来了。我不知道你为什么这样做,它没有被使用。你应该返回一个布尔值。
checkinput
变为:
bool checkInput(string c) {
if (c.length() > 1)
return false;
return c == "Y" || c == "y" || c == "N" || c == "n";
}
现在您可以简化do-while并删除try语句。此外,由于我们成功抓取任何输入,因此现在不需要test
变量:
int main() {
string choice = "";
do {
cout << "Enter yes or no (y/n): ";
getline(cin, choice); // or cin >> choice;
bool check = checkInput(choice);
if (!check)
cout << "Error: Input must be y or n." << endl;
} while (true);
}
您也可以进一步简化此操作,但这会以可读性为代价。祝你好运!