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

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

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 。

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

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

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

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

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