Scanf et getchar qui fonctionne aléatoirement...?
Résolu
kevdaig
Messages postés
16
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
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
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
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:
char* MsgDemande(int NumDemande) { switch(NumDemande) { case DEMANDE_NIVEAU: return "Quel niveau desirez-vous jouer?\n\n 1-Tres facile ( 5%)\n 2-Facile (10%)\n 3-Moyen (15%)\n 4-Difficile (20%)\n 5-Tres difficile (25%)\n\n(Ou (Q)uitter la partie)\n\n Commande: "; break; case DEMANDE_X: return "\nQuelle sera la dimension en X (10-75)?\n(Ou (Q)uitter la partie)\n\n Commande: "; break; case DEMANDE_Y: return "\nQuelle sera la dimension en Y (10-18)?\n(Ou (Q)uitter la partie)\n\n Commande: "; break; case DEMANDE_ACTION: return "(Q)uitter/(M)ine/(E)xplorer\n\n Commande: "; break; case DEM_COUP_X: return " dans quelle colonne se trouve cette case?\n Commande: "; break; case DEM_COUP_Y: return "\ dans quelle ligne se trouve cette case?\n Commande: "; break; default: return "\nProbleme avec le message a afficher... \n\n"; break; } }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,