如何验证用户输入的数字实际上是c中有效的无符号整数

2024-05-23

我正在用 c 编写一个程序,它在命令行上接受用户的参数,但该参数必须是有效的无符号整数。例如,如果用户输入值-1,那么我将不得不打印错误代码。或者,如果用户输入高于 4294967295 的任何内容,那么我也会打印错误代码。

我不确定如何检查他们的输入是否在正确的范围内(0 和 4294967295)。


验证用户输入的数字实际上是 c 中有效的无符号整数

strtoul()是正确使用的函数。它在接受时会带来一些问题'-'。让我们假设前导空格是可以的,并手动检查字符串的前端。

// 0: invalid, 1: valid
int unsigned_int_valid(const char *s) {

  while (isspace((unsigned char) *s) s++;
  // Fail on '-' as any negative number is out of range.
  if (*s == '-') return 0;  // Could add code to allow "-0"
  if (*s == '+') s++;
  if (!isdigit((unsigned char) *s) return 0;
  // Code knowns string begins with a digit

  errno = 0;     // Clear this global value as code tests it later.
  char *endptr;  // Pointer where parsing stopped.
  unsigned long ul = strtoul(s, &endptr, 0);

  // Usually this test is needed to see if _any_ conversion happened,
  // but code knowns the first character is a digit.
  #if 0
  if (s == endptr) return 0;
  #endif

  // Could march down the end of the string allowing trailing white-space
  while (isspace((unsigned char) *endptr) endptr++;

  // Extra text after the digits?
  if (*endptr) return 0;

  // Overflow?  strtoul sets `errno = ERANGE` when "outside the range" of unsigned long
  if (errno) return 0;

  #if ULONG_MAX > UINT_MAX
  // Does 'ul` value exceeds `unsigned` range?
  if (ul > UINT_MAX) return 0;
  #endif

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

如何验证用户输入的数字实际上是c中有效的无符号整数 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • 从哪里开始使用适用于 Retina 显示屏的 OpenGL 绘制程序

    我知道由于这里提到的错误 我无法将 GLPainter 示例从苹果适应到视网膜 在 Retina iPad 上显示全屏 CAEAGLLayer 时出现问题 https stackoverflow com questions 9757052
  • Swift 结构类型集

    说我有一个struct 可以是任何东西 struct Cube var x Int var y Int var z Int var width Int 然后我该如何创建一个Set这些点中 是否存在两个具有相同属性的对象 let points
  • iOS SecItemCopyMatching RSA 公钥格式?

    我正在尝试从已生成的密钥对 两个SecKeyRefs 以便通过线路发送 我所需要的只是一个简单的 modulus exponent 对 它应该正好占用 131 个字节 模数为 128 指数为 3 但是 当我获取关键信息时NSData对象 我
  • 如何在 htaccess 中创建永久链接

    我想将链接重定向到 Linux 主机中具有 htaccess 文件的另一个链接 你能帮助我吗 from http example com examp to http example com examp php 还有我的另一个网站的另一个 f
  • 在 WebView 中注入 Javascript 桥

    我想从 Android 网页中提取一些内容 我知道有一些库可以解析 HTML 但我想也许我可以稍微作弊一下 这就是我正在做的 使用应用程序上下文以编程方式创建 WebView 因此不必在 UI 中显示它 加载网页 附上JS接口 注入一些 J
  • 设置、让、宏、坚果

    我正在尝试从 html 内容构建一个快速目录 为了简短起见 代码非常简单 defn toc content doseq i take 5 iterate inc 1 let h str h i println content h where
  • 找不到满足Flask要求的版本

    找不到满足Flask要求的版本 https i stack imgur com K2gR4 jpgpip install U Flask 收集瓶 无法获取网址https pypi python org simple flask https
  • 传递表 ID 时循环遍历

    我有四个 HTML 表 必须将一个表中的数据与用户选择的表中的数据进行比较 我将用户选择的表 ID 传递到此函数中 但我不知道如何循环此表的行 function callme code var tableName table code al
  • MySQL 薛定谔表:存在,但不存在

    我遇到了最奇怪的错误 有时 在创建或更改表时 我会收到 表已存在 错误 但是 DROP TABLE 返回 1051 未知表 所以我得到了一个无法创建 无法删除的表 当我尝试删除数据库时 mysql 崩溃了 有时它有助于创建另一个具有不同名称
  • 如何在“object”标签内选择 SVG?

    HTML 页面的内容如下所示 方法如下script js looks var tooltip d3 select body append div style position absolute sty
  • 在子类 unique_together 元选项中使用基类字段时出错

    使用以下代码 class Organization models Model name models CharField max length 100 alias models SlugField class Division Organi
  • 从软件查找服务返回无效结果

    我尝试通过 XCode 组织者提交 iOS 应用程序 但在身份验证后失败 组织者说 从软件查找服务返回的结果无效 我怎么解决这个问题 检查 iTunes Connect 中您的应用程序状态是否为 等待上传 您可以更改状态以按 准备上传二进制
  • Knockout.js - 数据绑定文本默认值

    在 knockout js 中 我有一个非常标准的字段 如下所示
  • 带有自定义 init 的 SwiftUI 视图

    假设我正在制作一个如下所示的自定义输入元素 struct CustomInput View Binding var text String var name String var body some View TextField name
  • SimpleMemership CreateUserAndAccount 自定义

    我正在尝试添加一个新属性UserProfile我的模型中的类 public class UserProfile Key DatabaseGeneratedAttribute DatabaseGeneratedOption Identity
  • 如何设置 ABPeoplePickerNavigationController 的提示?

    这是我用来调用人员选择器的代码 但提示标签文本不会更改 ABPeoplePickerNavigationController picker ABPeoplePickerNavigationController alloc init pick
  • 基于坐标合并数据框

    我有两个数据框 两个数据框都包含经度和纬度列 我想根据经度和纬度列合并这两个数据框 首先 我应用了普通merge函数 它产生空的结果数据框 我调查发现两个数据框没有相同的经度和纬度列 然后我尝试了另一个函数merge asof并将方向设置为
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • xml:space="preserve" 对 XML 属性之间的空间有影响吗?

    我知道 a b b a 不同于 a b b a 然而 又怎样呢 a b b a
  • 如何验证用户输入的数字实际上是c中有效的无符号整数

    我正在用 c 编写一个程序 它在命令行上接受用户的参数 但该参数必须是有效的无符号整数 例如 如果用户输入值 1 那么我将不得不打印错误代码 或者 如果用户输入高于 4294967295 的任何内容 那么我也会打印错误代码 我不确定如何检查