Scanf检测前导0

时间:2013-11-16 14:04:57

标签: c int scanf

我想知道如何检测输入是否有前导零。

scanf("%d", &d);

这只会改变07到7等。

最后我想返回(1)如果输入有前导零并且如果输入正常则返回(0)。

谢谢。

3 个答案:

答案 0 :(得分:3)

如果您想知道数字是否有前导零,您必须将其作为字符串读取,并自行进行验证。字符串07只是表示性的,当存储为整数时,它只存储为7

要验证您读取的字符串是带有前导零的整数,您可以先使用strtol检查它确实是一个有效的整数。然后检查字符串中的第一个字符是否为'0'

答案 1 :(得分:0)

一种棘手的方式:

int d;
char s1[1000], s2[1000]; //maybe lower
scanf("%s", s1);
d = strtol(s1, NULL, 10);
sprintf(s2, "%d", d);
if (strcmp(s1, s2) == 0) return 0; else return 1;

答案 2 :(得分:0)

如果你坚持,你可以先用"0%d"阅读,如果失败(scanf()返回的参数少于预期),请再次阅读%d

但我不明白为什么你更喜欢这个阅读整个字符串并测试.... (所以不需要对这一点进行投票,这只是一种无用的和黑客的方式)

    #include <stdio.h>
    int main(){
            int x ,r ;
            r=scanf("0%d",&x);
            printf("%d ret=%d\n",x,r);
            r=scanf("%d",&x);
            printf("%d ret=%d\n",x,r);
            return 0;
    }

编译并分别使用echo "74" | ./a.outecho "074" | ./a.out运行。