Scanf et getchar qui fonctionne aléatoirement...?
Résolu
kevdaig
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je ne sais pas si je fais quelque chose d'illégale mais voilà: j'ai des parties de fonctions qui s'execute aléatoirement...une fois sur 2 ou sur 3. Par exemple, si je ne rentre pas un entier valide, j'aurai 2 fois le message d'erreur sans me faire demander de faire une saisie au clavier...Donc dans le cas ci-dessous, le printf et le scanf fonctionne seulement 1 fois sur 2...
En voici un exemple:
Quelqu'un a une idée tordue?
En voici un exemple:
int ValideEntierBornes(int Min, int Max, char* Msg) { int EntierValide=FALSE; while(EntierValide==FALSE) { //Affichage du message passé en paramètre printf("%s", Msg); scanf("%d",&EntierValide); //Si l'entier reçu via scanf n'est pas entre les bornes if(Min>EntierValide||EntierValide>Max) { EntierValide=FALSE; printf("\nEntree I-N-V-A-L-I-D-E ! \n"); } } return EntierValide; }
Quelqu'un a une idée tordue?
A voir également:
- Scanf java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
Quand je fais le debug pas à pas, dans mon mon scanf me retourne le code ASCII "2" et si j'utilise un getchar à la place, cela me retourne le code ASCII "10"...mais je n'ai rien tapé au clavier c'est dingue!
Pour ton info, Msg n'est qu'une chaine de caractère qui arrive de cette fonction:
En tout cas le else est vraiment important.
De plus, autre erreur :
EntierValide==FALSE
Tu mets FALSE dans EntierValide et c'est EntierValide que tu retournes...
Il faut dissocier ces variables : 1 pour la boucle, l'autre pour la variable. Ou alors si tu n'en veux qu'une, il faut mettre la condition aussi dans la boucle while...
Après, pour le getchar() c'est normal qu'il retourne un 10. Mais j'en ai pas parlé vu que ça ne faisait pas partie de ton post initial. Il faut savoir qu'au moment du scanf("%d",&EntierValide); tu appuies sur la touche entrée ('\n') pour valider le nombre saisi. Ainsi il y a '\n' (qui vaut 10) qui traine dans le buffer clavier. Si tu fais un getchar(), ce dernier va récupérer le 10.
Cdlt,