我目前正在处理分配,并且正在尝试使用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”的实例”,并且不确定我要去哪里。如果有人能提供一些见识,我将非常感激。
答案 0 :(得分:0)
如果std::cin >> e
不适合,则可以使用istringstream
:
std::string asText;
std::getline(cin,asText);
std::istringstream iss (asText);
if (iss >> e)
答案 1 :(得分:0)
我设法将其更改为:
int inputValidation(std::string message) {
int e = NULL;
std::string es;
bool check = false;
do {
try {
std::cout << message;
getline(std::cin, es);
if (!atoi(es.c_str())) {
throw stringInput;
}
else {
e = atoi(es.c_str());
check = true;
}
}
catch (std::exception& er) {
std::cout << "Error! " << er.what() << std::endl;
}
} while (!check);
return e;
}
//In another function -->
do {
selectedMonth = inputValidation("Please select a month: ");
} while (selectedMonth < 1 || selectedMonth >(12 - actualMonth));