Cherche une fonction en C

Fermé
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 - 10 oct. 2005 à 19:28
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 - 10 oct. 2005 à 20:11
salut, je cherche une fonction en C qui permettrait de savoir si ce qu'as saisi l'utilisateur est bien numérique. Y a t il une fonction qui verifie cela??

Sinon comment je pourrais faire ?
Merci
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)

6 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2005 à 19:39
Salut,

Je vois pas de fonction qui vérifie ça.
Mais bon admettons que tu récupères avec une variable char:
char machin[32];
scanf("%s",machin);


Tu peux vérifier que chaque caractère entré est bien un chiffre grâce à la correspondance ascii. De 48 à 57 c'est la correspondance ascii de 0 à 9, donc tu as juste à vérifier que chaque caractère se situe dans cet intervalle (hormis le '\0' de la fin).
0
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
10 oct. 2005 à 19:43
un style comme ça
char machin[32];
scanf("%s",machin);
while (machin < 48 && machin >67)
{
printf ("erreur, recommencez !"):
}



La syntaxe a pas l'air bonne pour les codes ascii, je fais comment ?
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2005 à 19:54
Non, en fait machin est un pointeur, donc ce que tu testes là c'est l'adresse vers laquelle il pointe, pas les valeurs du tableau contenues à cette adresse.

Ensuite avec while (machin < 48 && machin >67), (si machin représentait les caractères comme tu le pensait) si le premier caractère est un chiffre, la suite ne sera pas testée, et c'est plutôt || que && (un "ou" plutôt qu'un "et", une valeur ne peut pas être superieure à 67 et inférieure à 48 en même temps :o)

Essaie plutôt quelque chose comme:
int str_size, i;
char machin[32];

scanf("%s",machin);
str_size=strlen(machin);

for(i=0;i<str_size;i++)
{
       if (machin[i] < 48 || machin[i] > 57) //C'est 57 pas 67
       {
               printf("Attention, vous n'avez pas entré un entier");
               i=str_size; // Raccourci pour sortir de la boucle 
       }
}
0
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
10 oct. 2005 à 20:02
merci beaucoup, c'est ce que je voulais, ça marche comme je le voulais.

Merci de ton aide
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 oct. 2005 à 20:08
Encore un petit truc au passage, là ton entier est stocké en ascii.
Si tu le veux comme une valeur entière habituelle, tu peux le convertir avec atoi().
Et scanf c'était juste pour l'exemple, si c'est pour une application sérieuse je ne te le conseille pas. Ca t'oblige à utiliser une variable dont la taille est statique pour recevoir les caractères en entrée (char machin[32]), c'est une faille vulnérable aux buffer overflow.

Il y a d'autres solutions.
0
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
10 oct. 2005 à 20:11
tres bien

merci encore
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
0