我想知道如何检测输入是否有前导零。
scanf("%d", &d);
这只会改变07到7等。
最后我想返回(1)如果输入有前导零并且如果输入正常则返回(0)。
谢谢。
答案 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.out
和echo "074" | ./a.out
运行。