[C] Problème de getc dans une boucle

Problème de getc dans une boucle [C] - C++ - Programmation

Marsh Posté le 30-03-2003 à 11:35:46    

Petite question concernant les saisies en C :
 
Désolé si c'est un problème de "newbie" mais je ne vois pas vraiment de solution... voici mon problème :
j'ai une boucle ou je gère des saisies de caractères de ce type :

Code :
  1. #include <stdio.h>
  2. int main(void) {
  3. int entry;
  4. while(1) {
  5.  entry = getc(stdin);
  6.  if ( entry == EOF ) {
  7.   fprintf( stderr, "Erreur!\n" );
  8.  } else {
  9.   fprintf( stdout, "Valeur de entry = %c\n", entry);
  10.  }
  11. }
  12. }


 
Si j'entre un caractère (disons 'x' par exemple) j'obtiens l'affichage suivant :

Code :
  1. Valeur de entry = x
  2. Valeur de entry =   // du blanc, NULL, retour chariot?


 
Si je j'entre deux caractères (disons "ab" ), j'obtiens l'affichage suivant :

Code :
  1. Valeur de entry = a
  2. Valeur de entry = b
  3. Valeur de entry =   // même chose qu'au dessus!


 
Si quelqu'un pourvait éclairer ma lanterne, ça serait fort chouette  :D, étant donné je n'ai pas trouvé de topic parlant de ce problème.
 
Y a t'il une histoire de flush en dessous de tout ça ?
 
ps: je travaille sous cygwin à priori ça ne devrait pas venir de là non?  
 
 
 

Reply

Marsh Posté le 30-03-2003 à 11:35:46   

Reply

Marsh Posté le 30-03-2003 à 12:46:35    

et le '\n' que tapes en faisant [entrée] tu crois qu'il disparait magiquement? :hello:  
 
préfères le while canonique

Code :
  1. int c;
  2. while((c=fgetc(stdin)) != EOF)
  3. {
  4.   // faire semblant de travailler
  5. }

Reply

Marsh Posté le 30-03-2003 à 13:01:18    

++Taz a écrit :

et le '\n' que tapes en faisant [entrée] tu crois qu'il disparait magiquement? :hello:  
 
préfères le while canonique

Code :
  1. int c;
  2. while((c=fgetc(stdin)) != EOF)
  3. {
  4.   // faire semblant de travailler
  5. }




Merci c'est ce que je voulais savoir, c'est donc bien le new line qui provoque ça!  :jap:  
 
Du coup je fais ça et ça règle mon problème :

Code :
  1. while ((entry=fgetc(stdin)) == '\n');


 
Encore merci! :)


Message édité par robbystar le 30-03-2003 à 13:19:32
Reply

Sujets relatifs:

Leave a Replay

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