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

  FORUM HardWare.fr
  Programmation
  C

  Redondance d'un printf (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Redondance d'un printf (débutant)

n°2117262
Profil sup​primé
Posté le 19-12-2011 à 15:31:41  answer
 

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. }

mood
Publicité
Posté le 19-12-2011 à 15:31:41  profilanswer
 

n°2117263
ccp6128
Syntax error
Posté le 19-12-2011 à 15:35:43  profilanswer
 

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

n°2117266
Profil sup​primé
Posté le 19-12-2011 à 15:44:30  answer
 

Merci je vais regarder.

n°2117277
tpierron
Posté le 19-12-2011 à 16:27:01  profilanswer
 

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).

n°2117281
Profil sup​primé
Posté le 19-12-2011 à 16:35:40  answer
 

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. }

n°2117379
gilou
Modérateur
Modzilla
Posté le 19-12-2011 à 22:26:13  profilanswer
 

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é!  --

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

  Redondance d'un printf (débutant)

 

Sujets relatifs
Select Case en VBA : question de débutant[Debutant] JTextPane, ne pas afficher les balises html
[Débutant]Private sub dans private sub?(VB)Création d'un livre d'or en PHP : problème de débutant...
[Python] Aide pour un programme de débutantGraph, redondance de mot
Javascript debutantdebutant en css
[Débutant] création site de streaming ![Résolu] [debutant] aide javascript
Plus de sujets relatifs à : Redondance d'un printf (débutant)


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