我正在尝试只允许集成商输入
应该拒绝:
应该接受:
当前代码
int getIntInput() {
int userInput;
while (true) {
std::cout << "> ";
std::cin >> userInput;
std::cout << std::flush;
if (std::cin.fail()) {
std::string cinBuffer;
std::cin.clear();
std::getline(std::cin, cinBuffer);
continue;
}
break;
}
return userInput;
}
已更新代码
问题:
int getIntInput() { std::string rawInput;int parsedinput;while (true) { std::cout << "> ";std::getline(std::cin,rawInput);std::cout << std::flush;try { parsedinput = std::stoi(rawInput);} catch (std::invalid_argument & e) { continue;} catch (std::out_of_range & e) { continue;} break;} return parsedinput;}
已完成代码
int getIntInput(bool allowNegatives = true) { bool validIntInput;std::string rawInput;int parsedinput;while (true) { validIntInput = true;//获取整个输入行std::cout << "> ";std::getline(std::cin,rawInput);std::cout << std::flush;for (int i= 0;i< rawInput.length();i++) { //如果(!isdigit( rawInputi ) && !(allowNegatives && I == 0 && rawInputi == '-')) { validIntInput = false;break;}} if (!validIntInput) { continue;}否则{尝试{ //尝试将字符串解析为int parsedinput = std::stoi(rawInput);//捕获所有可能的异常,将需要另一个输入} Catch (...) { continue;} //如果代码到达此处,则字符串已被解析为整型中断;}}返回parsedinput;}
https://stackoverflow.com/questions/50888816
复制相似问题