首页 > 后端开发 > C++ > 如何在'atoi()”之外验证 C 中的数字输入?

如何在'atoi()”之外验证 C 中的数字输入?

Linda Hamilton
发布: 2024-11-21 21:01:12
原创
298 人浏览过

How to Validate Numeric Input in C   Beyond `atoi()`?

验证 C 中的数字输入

在处理整数输入的程序中,确保用户提供有效的数字至关重要。不幸的是,atoi() 函数在处理多位整数时存在不足。本文探讨了验证数字输入的替代方法。

使用失败位

C 的输入流 (cin) 在遇到无法解析的输入时设置失败位。可以利用它来验证输入,如下所示:

int n;
cin >> n;
if(!cin) {
    // User did not input a number
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
登录后复制
  • if(!cin) 检查是否设置了失败位。
  • cin.clear() 重置流状态。
  • cin.ignore() 会跳过无效输入,从而允许

处理输入溢出

当整数超过最大允许值时,cin 也会设置failbit。为了防止这种情况,请在读取输入之前检查流状态:

while(!cin.eof()) {
    int n;
    cin >> n;
    if(!cin) {
        // Input error occurred
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else {
        // Valid input
        process(n);
    }
}
登录后复制

此循环继续读取并验证输入,直到到达文件末尾 (EOF)。

其他替代品

  • C 11 stringstream: 根据输入创建字符串流并尝试将其转换为整数。
  • 正则表达式 (regex): 使用正则表达式强制执行特定的数字格式。
  • Boost 库: 使用 Boost 的 boost::regex 或 boost::lexical_cast输入验证。

以上是如何在'atoi()”之外验证 C 中的数字输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板