当前位置:  开发笔记 > 编程语言 > 正文

检查scanf中的值是否为数字?

如何解决《检查scanf中的值是否为数字?》经验,为你挑选了2个好方法。

以最简单的方式,我如何检查从函数初始化的整数scanf是否为数字?



1> Mark Byers..:

http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

成功时,[scanf]返回成功读取的项目数.如果发生匹配故障,此计数可以匹配预期的读数或更少,甚至为零.如果在成功读取任何数据之前输入失败,则返回EOF.

所以你可以这样做:

#include 

int main()
{
    int v;
    if (scanf("%d", &v) == 1) {
        printf("OK\n");
    } else {
        printf("Not an integer.\n");
    }
    return 0;
}

但建议您使用fgets和strtol.



2> AnT..:

你的问题措辞奇怪.初始化的整数总是一个数字(除了异常情况下的陷​​阱表示),这意味着不需要检查任何东西.

我猜你需要检查给定的字符串是否是数字的有效表示.为此,您首先需要定义有效表示应该是什么样子.你允许签名吗?是否+允许冗余(作为标志)?0x十六进制的前缀怎么样?等等.

C语言提供了自己的一套规则,用于定义语言对整数的有效字符串表示的概念.如果这是你需要的,那么为了验证给定的字符串是否满足这些规则,最好的方法是使用字符串到整数转换函数strtol(和strto...组中的其他函数),然后检查错误条件.

请注意建议编写自己的函数来验证这些规则的答案.这没有任何意义,因为标准功能已经存在.而且,严格地说,在现实生活中,很少需要在没有实际转换的情况下执行验证.strto...会做两件事.

此外,远离函数从scanf组到perfrom字符串到整数的转换.这些函数在溢出时产生未定义的行为(即,如果输入字符串表示太长).在一般情况下,在C中进行这种转换的唯一正确方法是来自strto...group的函数.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有