Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1778 connectés 

  FORUM HardWare.fr
  Programmation
  C

  impossible de rejouer....probleme de scanf :(

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

impossible de rejouer....probleme de scanf :(

n°1832711
Kargol
Posté le 31-12-2008 à 00:19:59  profilanswer
 

Bonjour,
j'ai fait un petit jeu en C et je suis face a un probleme que je n'arrive pas a résoudre!!!
Voila lorsque la partie se termine je propose de rejouer mais le scanf correspondant à la saisie de la réponse ne fonctionne pas.
 
voici une partie du code:

Citation :


main()
{
  char plateau[10][10];
  char joueur1[15];
  char joueur2[15];
  int joueur;
  int p;
  int i;
  int numcolonne;
  int numligne;
  int victoire;
  int nbjeu;
  char rejoue;
  joueur=1;
  printf("\nBienvenue dans Neomix!!!\n" );
  rejoue='o';
  while(rejoue=='o')
    {
      printf("\nentrez le nom du joueur 1:" );
      scanf("%s",joueur1);
      printf("entrez le nom du joueur 2:" );
      scanf("%s",joueur2);
      printf("%s joue avec les O et %s joue avec les X\n",joueur1, joueur2);
      initialisation(plateau);
      affichage(plateau);
      victoire=0;
      nbjeu=0;
      while(victoire!=1 && nbjeu<60)
 {
   oujouer(&numligne,&numcolonne, joueur, joueur1, joueur2);
   jouer(plateau,&p,numligne,numcolonne,&joueur);
   resultatjouer(&p, &numligne, &numcolonne, plateau, &joueur, joueur1,joueur2);
   affichage(plateau);
   victoire=gagner(numligne,numcolonne, plateau);
   nbjeu=nbjeu+1;
 }
      if(victoire==1)
 {
   if(joueur==2)
     printf("%s est vainqueur\n",joueur1);
   else
     printf("%s est vainqueur\n",joueur2);
 }
      if(nbjeu==60)
 printf("match nul\n" );
      printf("Voulez vous une nouvelle partie?(o/n)\n" );
      scanf("%c",&rejoue);
 
    }
}
 


 
Merci d'avance de votre aide ;)

mood
Publicité
Posté le 31-12-2008 à 00:19:59  profilanswer
 

n°1832739
Joel F
Real men use unique_ptr
Posté le 31-12-2008 à 09:47:19  profilanswer
 

scanf est bancal. Utilisez fgets sur stdin.

n°1832768
dwogsi
Défaillance cérébrale...
Posté le 31-12-2008 à 11:17:45  profilanswer
 

Problème bien connu me semble-t-il en C.
Une recherche aurait donné de bonnes réponses...
M'enfin, puisque je suis en plein dans le C, je me lance sur quelques explications.
 
Ton problème vient du fait que l'entrée standard n'est pas purgée aprés un premier appel à scanf().
Classiquement on utilise ce genre de fonction pour purger stdin :
 

Code :
  1. void purger(void)
  2. {
  3.    int c;
  4.    while ((c = getchar()) != '\n' && c != EOF) {}
  5. }


Donc ton code deviendrait :

Code :
  1. main()
  2. {
  3.  // [...]
  4.  while(rejoue=='o')
  5.  {
  6.      printf("Voulez vous une nouvelle partie?(o/n)\n" );
  7.      scanf("%c",&rejoue);
  8.      // On purge stdin
  9.      purger();
  10.  }
  11. }


Mais comme l'a très justement précisé Joel F il est préférable d'utiliser fgets sur stdin.
Exemple trouvé en deux secondes : http://www.siteduzero.com/tutoriel [...] fgets.html


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  impossible de rejouer....probleme de scanf :(

 

Sujets relatifs
Problème avec condition dans script batchpetit probleme avec un script css
probleme sur formulaireProblème de connexion avec SQL serveur 2005
Petit problème d'affichage HTMLProbleme de scintillement des composants
[Résolu] Problème d'email selon son contenuprobleme creation forum php
probleme fonction vba, le renvoi ne marche pas 
Plus de sujets relatifs à : impossible de rejouer....probleme de scanf :(


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR