Scanf détecte le premier 0

Je voudrais savoir comment détecter si l’entrée contient des zéros non significatifs.

scanf("%d", &d); 

Cela changera juste 07 à 7 etc.

En fin de compte, je voudrais retourner (1) si l’entrée a des zéros non significatifs et retourner (0) si l’entrée est ok.

Je vous remercie.

Si vous voulez savoir si un nombre comporte des zéros non significatifs, vous devez le lire sous forme de chaîne et procéder à la vérification vous-même. La chaîne 07 est juste présentation, lorsqu’elle est stockée sous la forme d’un entier, elle n’est stockée que 7 .

Pour vérifier que la chaîne que vous avez lue est un entier avec des zéros au début, vous pouvez d’abord utiliser strtol pour vérifier qu’il s’agit bien d’un entier valide. Ensuite, vérifiez si le premier caractère de la chaîne est un '0' .

Une manière délicate:

 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; 

Si vous insistez, vous pouvez d’abord le lire avec "0%d" , si cela échoue ( scanf() renvoie moins d’argument que prévu), relisez-le avec %d .

Mais je ne vois pas pourquoi vous préféreriez ceci à la lecture de la chaîne entière et à un test ….

  #include  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; } 

Comstackz-le et lancez-le avec echo "74" | ./a.out echo "74" | ./a.out et echo "074" | ./a.out echo "074" | ./a.out respectivement.