Bonjour à tous,
Est-ce qu'il existe une fonction qui teste un paramètre s'il est une valeur numérique ou non? Par exemple si je lui passe la valeur 10 ==> succès sinon elle affiche un message d'erreur.
Merci à tous.
Bonjour à tous,
Est-ce qu'il existe une fonction qui teste un paramètre s'il est une valeur numérique ou non? Par exemple si je lui passe la valeur 10 ==> succès sinon elle affiche un message d'erreur.
Merci à tous.
Salut,
Quel serait le paramètre de ta fonction ?
Car il existe bien strtol(), qui convertit une chaîne en long :
Si tu veux tester un simple caractère, la fonction isdigit() suffit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <stdio.h> #include <stdlib.h> int main (void) { char s[] = "201"; char *p_conv = NULL; strtol (s, &p_conv, 10); if(p_conv != NULL) { if(*p_conv == 0) { printf("s peut etre converti en nombre\n"); } else { printf("s ne peut pas etre converti en nombre\n"); } } return 0; }
Bonjour,
en fait je dois passer un paramètre en ligne de commande a ma fonction (arg[0]) et ce paramètre doit impérativemen être une valeur numérique.
J'ai trouvé la fonction isdigit() mais cette fonction opère uniquement sur un seul chiffre à la fois
Eh bien, sers-toi de strtol() comme dans mon exemple.
C'est parfaitement adapté à ton cas.
A noter que dans mon exemple, je ne l'ai pas fait, mais tu peux récupérer le long issu de la conversion. Il est retourné par la fonction.
lorsque j'utilise strtol() et si par exemple je passe en paramètre la valeur "toto", ça serait quoi le résultat? Il faut que dans ce cas un message d'erreur sera affiché
Prends mon exemple et fais différents tests en changeant la chaîne s. (Essaie en mettant "1234" puis "toto").Envoyé par ryadh.naouar
Ce code me semble tout de même assez clair.
N'hésite pas à consulter la doc de strtol().
Tu peux aussi coder une fonction toute simple :
Les parties entre /* --- */ servent à gérer les nombres à virgule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 int is_number(char *av) { int i; /* --- */ char flg; flg = 0; /* --- */ for (i = 0; av[i]; i++) { if (! (av[i] >= '0' && av[i] <= '9')) return(write(1, "Nombre invalide !\n", 18), 1); /* --- */ else if (av[i] == ',') flg++; if (flg == 2) return(write(1, "Nombre invalide !\n", 18), 1); /* --- */ } return (write(1, "Nombre invalide !\n", 18), 0); }
Vala, c'est une solution comme une autre.
D'accord je vous remercie. En effet strtol est efficace.
Merci
N'oublie pas de cliquer sur "Résolu" si ton problème l'estEnvoyé par ryadh.naouar
![]()
Cette fonction est loin d'être simple et est horrible :Envoyé par Beldom
- Usage de int au lieu de size_t pour parcourir le tableau.
- En C, ce n'est pas une virgule qui sépare la partie entière de la partie décimale mais un point
- Retours multiples, à éviter
- Si j'envoie NULL en paramètre, que se passe-t-il ?
Pourquoi vouloir faire compliqué quand on peut faire simple ?
Il existe une fonction toute prête...
- Utilisation de writeEnvoyé par odsen.s
- Aucun test de retour de l'appel système write
- Ne gère pas les séparations par des .
- et bien crade
Partager