以最简单的方式,我如何检查是否从函数初始化了一个整数 scanf
是一个数字?
以最简单的方式,我如何检查是否从函数初始化了一个整数 scanf
是一个数字?
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
成功时,[scanf]返回 成功阅读的项目数量。这个 count可以匹配预期的数量 读数或更少,甚至为零,如果a 发生匹配失败。在这种情况下 任何数据之前的输入失败 可以成功阅读,EOF是 回。
所以你可以这样做:
#include <stdio.h>
int main()
{
int v;
if (scanf("%d", &v) == 1) {
printf("OK\n");
} else {
printf("Not an integer.\n");
}
return 0;
}
你的问题措辞奇怪。初始化的整数总是一个数字(除了异常情况下的陷阱表示),这意味着不需要检查任何东西。
我猜你需要检查是否给定 串 是数字的有效表示。为此,您首先需要定义有效表示应该是什么样子。你允许签名吗?是多余的 +
允许(作为标志)?关于什么 0x
十六进制的前缀?等等。
C语言提供了自己的一套规则,用于定义语言对整数的有效字符串表示的概念。如果那就是你需要的,那么为了验证给定的字符串是否满足这些规则,最好的方法是使用字符串到整数的转换函数 strtol
(以及其他功能) strto...
组)然后检查错误情况。
请注意建议编写自己的函数来验证这些规则的答案。这没有任何意义,因为标准功能已经存在。而且,严格来说,在现实生活中,很少需要在没有实际转换的情况下执行验证。 strto...
会做两件事。
此外,远离功能 scanf
group to perfrom string-to-integer conversion。这些函数在溢出时产生未定义的行为(即,如果输入字符串表示太长)。一般情况下,在C中进行这种转换的唯一正确方法是函数 strto...
组。