Votre question

[C/C++] !! zappage de scanf !!

Tags :
  • string
  • Programmation
Dernière réponse : dans Programmation
2 Mars 2006 19:47:22

Bonjour à tous, alors voila je commence a apprendre le C/C++. Avec mes connaissances j'ai tenté de faire un jeu de pendu, seulement au début, ca me zappe un scanf qui demande quelle lettre doit être testée. voici mon code
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. long jeu(char* mot);
  5.  
  6.  
  7. int main()
  8. {
  9. char mot[1000];
  10. printf("\n\n");
  11. printf("\t\t********************\n");
  12. printf("\t\t* *\n");
  13. printf("\t\t* JEU DU PENDU *\n");
  14. printf("\t\t* *\n");
  15. printf("\t\t********************\n\n");
  16. printf("Rentrez le mot a rechercher. ");
  17. scanf("%s",&mot);
  18. for(long i=0;i<=40;i++)
  19. {
  20. printf("\n");
  21. } // jusque là ca a juste affiché l'écran de présentation et ca a demandé quel était le mot a rechercher.
  22. jeu(mot);
  23. return 0;
  24. }
  25.  
  26.  
  27. long jeu(char* mot)
  28. {
  29. char lettreATester;
  30. long i=0;
  31. long longueurMot = strlen(mot);
  32. longueurMot--;
  33. printf("\t");
  34. while(i<=longueurMot)
  35. {
  36. printf(" _");
  37. i++;
  38. } // ca affiche un certain nombre de tirets_bas en fonction de la longueur du mot a rechercher.
  39. printf("\n");
  40. printf("Quelle lettre voulez-vous tester ? ");
  41. scanf("%c",&lettreATester);
  42. }

en fait ca passe le scanf apres "quelle lettre voulez-vous tester ?" et ca termine directement le programme. merci d'avance.

Autres pages sur : zappage scanf

a b L Programmation
2 Mars 2006 21:30:30

Ajoute ceci après chaque scanf():
  1. fflush(stdin);

ça vide le buffer clavier. Je pense que comme tu demande une chaine de caratère, il garde la touche "entrée" en mémoire clavier.

J'ai pas testé, je ne sais pas si c'est ça, mais je ne vois rien d'autre.
2 Mars 2006 22:28:13

Sans tester c'est ça : erreur classique ;-)
3 Mars 2006 14:48:19

j'ai essayé mais ca ne change rien du tout..... je le met a la ligne qui suit le scanf mais ca ne change rien...

tu dis que c'est parceque je demande une chaine de caractere, or je demande un seul caractere d'ou le %c. Il faut pas mettre autre chose dans ce cas ?
3 Mars 2006 15:10:18

Essaye avec cin et cout :) 
3 Mars 2006 17:29:03

Il faut effectivement, entre autre, mettre le
  1. fflush(stdin);

après le premier scanf
  1. ...
  2. printf("Rentrez le mot a rechercher. ");
  3. scanf("%s",&mot);
  4. fflush(stdin);//-- ici --
  5. for(long i=0;i<=40;i++)
  6. {
  7. ...

En revanche je suis étonné que ton code compile sans erreur alors que le prototype de ta fonction jeu est :
  1. long jeu(char* mot);

et que ta fonction ne retourne rien ...
3 Mars 2006 18:31:11

j'ai essayé en changeant le long par void mais ca ne change rien. Je pense que je vais tout simplement continuer les tutoriaux avant de faire un jeu du pendu =D
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS