fgets est ignoré, comment faire une saisie robuste ?

fgets est ignoré, comment faire une saisie robuste ? - C - Programmation

Marsh Posté le 11-06-2004 à 02:26:35    

j'ai a peu pres le meme soucis que fred  
http://forum.hardware.fr/forum2.ph [...] subcat=440
 
 
lorsque j'utilise fgets, la fonction est ignoré, on me demande pas de taper du texte ...
 
 
j'ai alors utilisé getc(stdin);
je peux saisir mon texte, mais lorsque je me trompe une premiere fois, la deuxieme fois, j'ai à chaque fois le caractere 10 (en %d) soit la validation  
 
donc pour valider apres avoir fais une erreur, c'est mon deuxième caractere qui est pris en compte ....  
 

Code :
  1. char    valeur_str[4];
  2.     valeur_str[3] = '\0';
  3.    
  4. do
  5. {
  6.     printf("\n  o -> oui / n -> non  : " );
  7.     getc(stdin); //si je le retire, fgets est ignoré  
  8.     fgets(valeur_str,2,stdin);
  9. }   
  10. while (valeur_str[0] != 'o' && valeur_str[0] !='n');


 
 
je rappelle que j'ai essayé aussi avec fgetc  
mais cela ne resoud pas le probleme
 

Code :
  1. char choix;
  2. choix = fgetc (stdin);

Reply

Marsh Posté le 11-06-2004 à 02:26:35   

Reply

Marsh Posté le 11-06-2004 à 06:30:48    

à première vue et sans réfléchir je ferais un fflush(stdin), comme ça :o
 
  char    valeur_str[4];  
      valeur_str[3] = '\0';  
         
   do  
   {  
        printf("\n  o -> oui / n -> non  : " );  
        fflush(stdin);  
        fgets(valeur_str,2,stdin);  
   }    
   while (valeur_str[0] != 'o' && valeur_str[0] !='n');

Reply

Marsh Posté le 11-06-2004 à 07:44:39    

putain mais c'est quoi ce bordel ... je me lève et je tombe sur un blaireau de la pire espèce :o
 
 char    valeur_str[4];  
      valeur_str[3] = '\0';  
 
 
->  char    valeur_str[4] = ""
 
 
ensuite, chaque affichage non terminé par un '\n' suivi d'une saisie est problématique à cause de la bufferisation de stdout : il faut donc forcer l'affichage -> fflush(stdout)

Reply

Marsh Posté le 11-06-2004 à 07:56:48    

c vrai que j'eus pas pensé qu'on affiche ce qu'on saisit
c'est de la merde, qbasic fait jamais ça avec les input et les print :o

Reply

Marsh Posté le 11-06-2004 à 09:16:59    

la merde, c'est de pas comprendre pourquoi fflush(stdin) n'a aucun sens et effet

Reply

Sujets relatifs:

Leave a Replay

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