如何使用 cin 实现单行整数类型命令行输入验证?

2023-12-03

我有一个程序要求用户输入 [0,2] 范围内的整数。我使用以下链接作为指南。

使用 cin - C++ 进行良好的输入验证循环

但是,当用户按 Enter 键而不输入数据时,光标只会转到命令提示符中的下一行,而我更希望它提示用户输入有效数字。在这种情况下提示用户是否有意义,或者是否有理由不首先将验证实现为单行输入?对于字符串,我会使用 getline 来解决这个问题,在这种情况下我应该以某种方式使用它吗?这是我的代码,基于上面的链接:

#include <iostream>

int main()
{
    int answeredNumber;
    while(1)
    {
        std::cout << "Enter your answer: ";
        if(std::cin >> answeredNumber && answeredNumber >= 0 && answeredNumber <= 2)
        {
            break;
        }
        else
        {
            std::cout << "Please enter a valid answer: " ;
            std::cin.clear();
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    }
    system("pause");
}

那是因为得到一个整数cin将跳过前导空格,包括换行符。没有简单的方法可以解决这个问题。

如果您想要基于行的输入,您可以将输入值作为string然后解释一下:

#include <iostream>
#include <sstream>
#include <string>

int main (void) {
    std::string inputLine;
    int answer;
    std::cout << "Enter your answer: ";
    while(1) {
        getline (std::cin, inputLine);
        std::stringstream ss (inputLine);
        if ((ss >> answer))
            if ((answer >= 0) && (answer <= 2))
                break;
        std::cout << "No, please enter a VALID answer: " ;
    }
    std::cout << "You entered " << answer << '\n';
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 cin 实现单行整数类型命令行输入验证? 的相关文章

随机推荐

  • 更改模型: 由 keras 在 model.summary() 输出中自动给出

    调用命令时 print model summary 我得到以下输出 如何重命名由 Keras 自动生成的突出显示字段 预先感谢您的帮助 有参数 名称 以函数格式 inp Input 10 out Dense 1 inp m Model in
  • 如何将多张图像合并为一张?

    我有几个图像 第三方 例如设置 mysql 设置通用 php 应用程序环境 设置第三方工具 我想制作一个 Dockerfile Docker Image 来组合这两个图像 然后运行更多命令 imageA imageV gt sharedIm
  • 封装在JavaScript中,存在吗?

    我有使用 C 编程语言的经验 但现在我还必须使用 JS 它对我来说相当新 我尝试用 JS 开发一个简单的类模拟 如下所示 http jsfiddle net T74Zm function A inputValue this Init inp
  • 如何让 rake 任务在 dev 以外的环境中运行?

    我有一台具有特殊 暂存 环境的暂存机 我总是忘记在该机器上运行 rake 任务 例如 rake jobs work RAILS ENV staging 所以我最终做了 rake jobs work 然后我很困惑为什么我的数据库中没有任何变化
  • pygame中.quit和.QUIT有什么区别

    我只是想知道之间的区别 quit and QUIT在 pygame 我已经测试了两者 但我仍然不明白它们是如何工作的 QUIT是事件类型的枚举常量 参见event模块 quit 事件在 pygame 窗口关闭时发生 for event in
  • Google App Engine python 入站邮件 LookupError:未知编码

    我按照示例使用 标准 入站邮件处理程序接收发送到我的 Google App Engine 应用程序的入站电子邮件在文档中 似乎发送到应用程序的某封电子邮件 不是由我发送 导致电子邮件 api 抛出 LookupError 未知编码异常 请参
  • 使用 jQuery 在浏览器调整大小时更改图像 src

    我有两张不同尺寸的图像 一张适用于小于 759px 的屏幕 另一张适用于大于 759px 的屏幕 我已经设法在文档加载时根据窗口宽度更改图像的来源 但我真的希望能够在调整浏览器大小时执行此操作 但在我的一生中 我无法让它执行此操作 它似乎只
  • 图像处理以去除线条

    我试图最终得到一张只有文本的图像 我的代码会将此图像视为灰度 并从中删除所有长线以及除文本 符号 测量值之外的所有内容 Is this something that can be accomplished using image proce
  • 如何从Oracle SQL中的字符开头删除定义的值?

    我在 Oracle SQL 中有如下表 col1 ABC 1234 ABC 55674 ABC 11 所以我在 col1 中有 总是 ABC 在每个值的开头 ABC 后不同长度的值 我需要如下结果 所以我需要删除 ABC 从每个值的开头 c
  • Pyparsing:获取结果名称中的标记位置

    我正在开发一个使用 pyparsing 解析命令行的程序 它使用 readline 库来提供命令编辑和完成 在应用程序的上下文中 有效的命令行是path 可选 然后是命令名称 可选 和一些参数 也是可选的 为了提供命令完成 应用程序解析命令
  • htmlspecialchars 和 mysql_real_escape_string 是否可以保护我的 PHP 代码免受注入?

    今天早些时候有人问了一个关于Web 应用程序中的输入验证策略 在撰写本文时 最佳答案建议PHP只是使用htmlspecialchars and mysql real escape string 我的问题是 这总是足够的吗 还有更多我们应该知
  • 如何从数组中删除所有数字?

    我正在尝试从数组中删除所有数字 该循环完全按照我想要的方式工作 但 splice 方法仍然由于某种原因跳过一些元素 let arr 1 2 3 4 5 notanumber 6 for let element of arr let inde
  • 使用 python os.rename 时出现错误 [183]

    这是我第一次使用 python 我一直遇到错误 183 我创建的脚本在网络中搜索所有 py 文件并将它们复制到我的备份驱动器 请不要嘲笑我的剧本 因为这是我的第一个剧本 我在脚本中做错了什么有什么线索吗 import os import s
  • 防止 ansible 在通过 with_items 传递时解析字符串

    我正在尝试使用with items指定要传递给自定义 ansible 模块的键 值对列表 当键或值字符串具有类似列表的格式时 就会出现问题 例如 a b c d 在这种情况下with items大概将字符串转换为列表并对我的配置造成严重破坏
  • 为什么不从 Enum> 扩展

    我偶然发现了以下问题 我无法从 Java 1 5 java lang 包 中定义的此类扩展和实现 public abstract class Enum
  • Pandas 到 timedelta 只有小时、分钟和秒

    在我的脚本中 我提取了一个 Excel 其中名为 Time 的列是 dtype 对象 该列中有一个像 14 00 00 这样的小时 我想将该列转换为 datetime 但是当我这样做时 df Time pandas to datetime
  • Jfreechart注释消失

    我用 JFreechart 绘制了一条曲线 然后用户可以通过拖动鼠标来绘制范围 我使用 AbstractChartAnnotation 绘制这些图来绘制填充的 Path2D 到目前为止一切都很好 一切都与曲线完美对齐 当某个区域已被注释时
  • Django user.is_authenticated 在某些地方有效,在其他地方无效

    在我的模板中 我有以下内容 ul class tabbed if user is authenticated li a href My Account a li li a href Log Out a li else li a href L
  • 将变量从 php 文件传递​​到 anther

    如何将变量从 php 文件传递 到另一个文件 而它不是 html 输入 只是我有一个引用另一个文件的链接 并且我想将变量或值传递给它 Example 文件1 php 文件2 php Use sessions存储需要在多个请求中保留的任何小值
  • 如何使用 cin 实现单行整数类型命令行输入验证?

    我有一个程序要求用户输入 0 2 范围内的整数 我使用以下链接作为指南 使用 cin C 进行良好的输入验证循环 但是 当用户按 Enter 键而不输入数据时 光标只会转到命令提示符中的下一行 而我更希望它提示用户输入有效数字 在这种情况下