将 string 类型转换为 unsigned int 时出现故障

2024-04-13

我编写的 C++ 函数遇到了一个恼人的问题,该函数的目的是验证用户输入。该函数读取用户输入,验证它是否是数字,如果是,则验证它是否在 [min, max] 范围内。

当我使用无符号类型调用模板函数时,就会出现问题,例如size_t,输入为负数。字符串流将字符串转换为类似 4294967291 的内容。我可以看到程序正在将数据转换为接近无符号数据类型最大值(在 numeric_limits 标头中定义)的值,但我的问题是为什么,因为if语句应该停止于sstream >> value?

My code:

template <class T>
T getNumberInput(std::string prompt, T min, T max) {
    std::string input;
    T value;

    while (true) {
        try {
            std::cout << prompt;
            std::cin.clear();
            std::getline(std::cin, input);
            std::stringstream sstream(input);

            if (input.empty()) {
                throw EmptyInput<std::string>(input);
            } else if (sstream >> value && value >= min && value <= max) {
                std::cout << std::endl;
                return value;
            } else {
                throw InvalidInput<std::string>(input);
            }
        } catch (EmptyInput<std::string> & emptyInput) {
            std::cout << "O campo não pode ser vazio!\n" << std::endl;
        } catch (InvalidInput<std::string> & invalidInput){
            std::cout << "Tipo de dados inválido!\n" << std::endl;
        }
    }
}

感谢您的时间!


在 C++ 算术中涉及unsigned键入n值位,保证模 2^n。这意味着任何结果都将返回到 0 到 2^ 的范围内n-1,通过加或减适当的2^倍数n。在C中也是如此。

因此,您需要检查输入的减号,或添加一些其他检查。

顺便说一下,你的if with >> and &&对我的坏代码计产生了一些影响。我永远记不起运算符的优先级>> versus &&。我想如果它编译了它一定没问题,因为>>不能在右侧取值。检查...好的,但我会用括号来澄清这一点。

另外,在代码结构上,将交互式输入与输入检查分开是一个好主意。例如,您可以在 GUI 程序中使用任何代码并从编辑字段输入吗?不,不是原来的样子……

干杯,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 string 类型转换为 unsigned int 时出现故障 的相关文章

  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 最小化时窗口内容消失

    我有一个简单的类 当鼠标拖动时画一条线 或者当鼠标按下 释放 时画一个点 当我最小化应用程序然后恢复它时 窗口的内容消失 除了最后一个点 像素 我明白这个方法super paint g 每次窗口更改时都会重新绘制背景 但无论我是否使用它 结
  • WebApi HTTPPOST 端点未命中

    我有以下简单的 HTTPPOST 端点 AllowAnonymous HttpPost Route forgotPassword public IHttpActionResult ForgotPassword string userName
  • 如何暂停 main()

    我正在尝试编写我的程序 以便当用户单击 Drive To JButton 在我的主类 Dispatch 中 时 它会从另一个类 Cab 打开一个 JFrame GoToDistination 用户可以在其中输入所需的内容信息 单击 继续 后
  • 如何仅在 Scrollview/Recyclerview 的底部添加淡入淡出边缘?

    I am using requiresFadingEdge true for adding fading effect at the bottom but the problem is it also shows fading effect
  • 如何将字符串{}值替换为obj(键值)

    我最近开始在 NodeJs 上编程 我有不同的字符串和 Json 对象 eg var str My name is name and my age is age var obj name xyz age 24 var str I live
  • 如何在 XML 模式中使任一字段为必填字段

    我有一个如下所示的架构 我有一些关于该架构的问题 1 制作方法CourierNumber or WorkLocationCoordinate强制性的 我使用了如下所示的一种全局类型 EDIT正如 Abel 在修改后的模式中提到的那样 仍然没
  • '无法在descriptionForLayoutAttribute_layoutItem_coefficient中创建描述。有些东西是零

    首先 我用 3 个不同的 UIView 来替换 iPad Storyboard 上 Split View Controller 中的详细视图 它在 iOS 8 iPad 上运行良好 但是 当我加载详细视图之一时 应用程序在 iOS 7 和
  • 递归可以命名为简单的函数调用吗?

    请考虑递归函数 1 int calc int num 2 sum sum num sum is a global variable 3 num 4 if num 0 5 return sum 6 calc num 它计算一个整数的总和 我的
  • 如何使用 Objective c 在 iOS 9.3 中添加动画到启动屏幕

    如何在 iOS 9 3 中制作如下图所示的动画启动屏幕 基本上 您无法制作动画启动画面 但是 您可以在故事板中复制启动屏幕 并将其作为应用程序的入口视图控制器 VC 然后 当视图加载时 您可以开始动画 最终结果是 您将得到一个 动画启动画面
  • 我的 jframe 不显示 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是java编程的初学者 我试图让我
  • OCaml 中 let rec 的限制

    这几天我在学习OCaml 发现了这个 OCaml 对于可以放在 let 记录右侧的内容有限制 像这个 let memo rec f norec let rec f memoize fun x gt f norec f x in f Erro
  • C# Windows 应用程序未关闭

    我有一个 C Windows 应用程序 我将其放置在测试服务器上 该服务器的设置不受我的公司控制 安全上下文也不受我的公司控制 我双击exe 应用程序运行 我看到我的表格 我关闭应用程序 打开任务管理器 但仍然看到应用程序的足迹 taskk
  • Node.js:获取客户端的IP

    req connection remoteAddress req headers x forwarded for req ip req ips 这一切意味着什么 有没有一种直接的方法可以简单地获取向我的 Node js Express 站点
  • python 将字符串解析为csv格式

    我有一个包含以下格式的行的文件 aaa A bbb B ccc C 我想将其转换为 csv 格式 以便方程两边的文字将是列 分号将作为行分隔符 我尝试做这样的事情 f open aaa txt r with open ccc csv w a
  • 表达式的不同编译器行为: auto p {make_pointer()};

    以下程序的正确行为是什么 example cpp include
  • Haskell Cabal:神秘的缺失或递归依赖关系

    我尝试安装jmacro包裹 它构建完美 绝对没有任何问题 但是 当我想使用它或安装类似的软件包时happstack jmacro 这取决于 jmacro 我收到如下错误消息
  • 如何让重力“底部”在 xml 中的可绘制对象上工作

    我有一个简单的目标 我想要我的 FrameLayout 上有一个浅灰色背景 下面有一条黑色分界线 仅在下面 而不是周围 到目前为止我有这个
  • System.getProperty("user.name") 返回 HOSTNAME 而不是当前记录的用户名

    Here System getProperty user name 返回 Windows Server 2008 计算机的主机名而不是当前登录的用户名 下面是我的代码 final String user System getProperty
  • PHP 删除另一个数组项(如果存在)[重复]

    这个问题在这里已经有答案了 我有 2 个对象数组 数组 A 和数组 B 如何检查数组 B 中的对象是否存在于数组 A 中 如果存在 则将其从数组 A 中删除 Example Array A id 1 name item1 id 2 name
  • 将 string 类型转换为 unsigned int 时出现故障

    我编写的 C 函数遇到了一个恼人的问题 该函数的目的是验证用户输入 该函数读取用户输入 验证它是否是数字 如果是 则验证它是否在 min max 范围内 当我使用无符号类型调用模板函数时 就会出现问题 例如size t 输入为负数 字符串流