首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅获取整数作为输入,代码未按预期工作

仅获取整数作为输入,代码未按预期工作
EN

Stack Overflow用户
提问于 2018-06-16 22:33:18
回答 3查看 76关注 0票数 2

我正在尝试只允许集成商输入

应该拒绝:

  • 5h
  • 3.4
  • 3.gh
  • 3.0
  • htr

应该接受:

  • -5
  • 78

当前代码

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;
}

已更新代码

问题:

  • 接受除"htr“以外的所有拒绝项(无数字)

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;}

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50888816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档