Redondance d'un printf (débutant)

Redondance d'un printf (débutant) - C - Programmation

Marsh Posté le 19-12-2011 à 15:31:41    

Bonjour.
Si j'écris le programme suivant, j'obtient deux printf consécutif entre chaque getchar.
Ou est mon erreur s'il vous plaît ?
 

Code :
  1. #include <stdio.h>
  2. int main (int argc, char * argv[])
  3. {
  4.  int done = 0;
  5.  while (!done)
  6.    {
  7.      printf("Player 2 : " );
  8.      char coup;
  9.      coup = getchar();
  10.  
  11.    }
  12. }

Reply

Marsh Posté le 19-12-2011 à 15:31:41   

Reply

Marsh Posté le 19-12-2011 à 15:35:43    

Faut flusher ton printf (avec un newline ou fflush).

Reply

Marsh Posté le 19-12-2011 à 15:44:30    

Merci je vais regarder.

Reply

Marsh Posté le 19-12-2011 à 16:27:01    

Hmm, je dirais plutôt que c'est la manière de rentrer ton caractère au clavier qui fait qu'il y a deux fois le message. La saisie doit être configuré en mode ligne, donc pour valider ton entrée, tu dois saisir un caratère, puis appuyer sur la touche "entrée". Bah voilà, pour getchar(), ça fait deux caractères.
 
Solution facile : tu filtres les '\r' ou '\n'
Solution plusse mieux : tu bascules la saisie en mode caractère (c'est faisable en quelques lignes de code, mais je n'ai plus ça sous la main, et flemme de faire la recherche. C'est lié à la gestion des terminaux posix, ce n'est pas dans la libc).

Reply

Marsh Posté le 19-12-2011 à 16:35:40    

A vrai dire, je n'ai pas encore regarder fflush ni newline, mais j'utilise une procédure pour vider le buffer telle que celle-ci
 

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

Reply

Marsh Posté le 19-12-2011 à 22:26:13    

Oui, c'est ce qu'il faut faire ici:
void vider_stdin(void) {
   char c;
   while ((c = getchar()) != '\n' && c != EOF) /* */;
}
 
et
 
int main (int argc, char * argv[])
{
  int done = 0;
  while (!done)
    {
      printf("Player 2 : " );
      char coup;
      coup = getchar();
      vider_stdin();
    }
}
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed