【发布时间】:2019-04-23 12:23:29
【问题描述】:
我目前正在处理一项任务,并尝试使用 try catch 错误处理来检查用户的输入是否是有效的 int。
我目前有这个:
int inputValidation() {
int e = 0;
std::string es;
bool check = false;
do {
try {
if (!getline(std::cin, e)) {
throw stringInput;
}
else {
check = true;
}
}
catch (std::exception& er) {
std::cout << "Error! " << er.what() << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
} while (!check);
return e;
}
我的问题是 if ((getline(std::cin, e))){} 部分。我也试过使用std::cin.getline(e, 256)
调用函数时我使用的是这个循环:
do {
std::cout << "Please select a month: ";
selectedMonth = inputValidation();
} while (selectedMonth < 1 || selectedMonth >(12 - actualMonth));
这只是确保他们只能输入从当前月份到 12 月的月份。
我知道我可以使用es 而不是e,但这违背了错误检查的目的。我唯一的想法是检查转化。
无论出于何种原因,我似乎收到错误“没有重载函数“getline”的实例”,并且不确定我哪里出错了。如果有人能提供一些见解,我将非常感激。
【问题讨论】:
-
您可以通过使用正确的参数来修复它,getline always takes a string,而不是 int。
-
std::cin >> e;有什么问题? -
@Borgleader 谢谢 :) 有没有办法在 if 语句之前使用该输入,然后检查转换?再次感谢
-
@mch 我正在努力清除缓冲区,发现尽管输入有效,但循环永远不会中断:/
-
@mch 我认为这是我的循环的问题——我的错
标签: c++