Se connecter avec
S'enregistrer | Connectez-vous

faire la difference entre un entier et le reste

Dernière réponse : dans Programmation

Bonjour,
j'ai un petit probleme (tres gros en fait),
voilà un exemple d'éxécution de mon programme :
> calculer factorielle 3 4 fibonacci 1 2 3 4
6
24
1
1
2
3
argv[0] = calculer
argv[1] = factorielle
argv[2] = 3
... etc
j'aimerai savoir si argv[2] est un entier ou pas exemple :
> calculer factorielle abc12/;,.
a ce moment là argv[2] n'est pas un entier

C'est en langage C

merci d'avance

Autres pages sur : difference entier reste

Lassé par la pub ? Créez un compte
Expert Programmation

is_int() ou bien is_numeric(), sachant que is_int c'est que pour les entiers, cependant je ne sait pas si elle marche bien avec les chaines de caractère. Alors que is_nueric() oui, et puis après tu peu arrondir
Expert Programmation

C'est bien un petit programme et loin d'être gros ;-)
argv est toujours un pointeur sur une chaine de caractère.
Donc il te faut convertir ta chaine de caractère "3" en valeur numérique. Tu as la fonction atoi() pour faire ça.
Tu peux aussi créer une macro, sachant que "0" = 0x30
donc tu fais caractere - 0x30 et tu as la valeur unitaire.
par exemple si argv[3] = "124"
la valeur serait:
  1. val = (argv[3][0] - 0x30) * 100 + (argv[3][1] - 0x30) * 10 + argv[3][2] - 0x30

Pour savoir si un caractère est un nombre il suffit de tester si caractere >= 0x30 et caractere <= 0x39

tu peux utiliser des macros pour faciliter tout ça:
  1. #define IS_CHAR_DIGIT(A) (A >= 0x30 && A <= 0x39)
  2. #define GET_CHAR_VAL(A) (A - 0x30)
Expert Programmation

Citation :

bluedylc a écrit :
Pourquoi tu donnes toujours les valeurs en hexa Cricky ?

C'est plus simple de compter en décimales, non ?

Ouais, c'est juste que je connais par coeur la valeur en hexa c'est tout :-D
C'est à cause de l'assembleur ;-)

Il suffit de tester si le nombre est égal à sa partie entière. En C: if (x == floor(x) ) { ....

C'est la même méthode en php, JavaScript ... tous les langages où la partie entière est floor. Pour d'autres elle se désigne par int comme dans VB et ses dérivés.
Expert Programmation

Citation :

ataofeal a écrit :
une exception en C ...
bref, la meilleur façon, à mon humble avis est celle décrite pas Cricky. Cependant j'utiliserai plutôt la fonction isdigit plutôt que la macro.

Ben les exceptions sont les crash ou les assert ;-)
Par contre, on ne peut effectivement pas les "catcher" en C.
Pour isdigit(), exact, il ne faut pas réinventer la roue (je ne savais pas qu'elle existait cette fonction en C :-D ).

Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :
Tom's guide dans le monde