SCANF检测0领先(Scanf detect leading 0)

2019-10-19 00:20发布

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

scanf("%d", &d);

这将只是改变07〜7等。

最后,我想回到(1)如果输入得到了前导零和返回(0),如果输入的是确定的。

谢谢。

Answer 1:

如果你想知道,如果一些有你要读它作为一个字符串,并让自己的验证前导零。 字符串07只是表象,如果因为它保存为只是一个整数存储7

要验证您已经阅读了字符串带前导零的整数,你可以先用strtol检查它确实是一个有效的整数。 然后,只需检查字符串中的第一个字符是'0'



Answer 2:

一个取巧的办法:

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;


Answer 3:

如果你坚持,你可以用它读"0%d"第一,如果失败( scanf()返回参数较少比预期的),以再次读取%d

但我不明白你为什么会喜欢这并测试读取整个字符串......(所以没必要只downvote这一个这是一个无用的和哈克的方式)

    #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.out echo "74" | ./a.outecho "074" | ./a.out echo "074" | ./a.out分别。



文章来源: Scanf detect leading 0
标签: c int scanf