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
£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
A voir également:
- Cherche une fonction en C
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction filtre excel n'existe pas - Forum Excel
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Fonction somme excel - Guide
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
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:
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).
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).
£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
10 oct. 2005 à 19:43
un style comme ça
La syntaxe a pas l'air bonne pour les codes ascii, je fais comment ?
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
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 <-.¸¸.·´¯)
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
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:
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 } }
£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
10 oct. 2005 à 20:02
merci beaucoup, c'est ce que je voulais, ça marche comme je le voulais.
Merci de ton aide
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
Merci de ton aide
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
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
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.
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.
£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
10 oct. 2005 à 20:11
tres bien
merci encore
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
merci encore
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)