[c] pb de fflush

pb de fflush [c] - Programmation

Marsh Posté le 10-09-2001 à 15:54:30    

je galere avec un tout petit pg de merde (une calculette) ...
je vous explique le principe :
c une mini calculette qui addition soustrait ... 2 nombre et cela en boucle juqu'a ce que l'utilisateurn rentre comme operateur 'q' ...
le pg marche bien au premier passage de la boucle, mais des le 2e passage ca merdoit :)
il me redemande pas l'operateur et pose direct la question suivante ... a mon avis il a garde en memoire un '\n' ou un truc dans le genre et c ca qui fait tt merder ! comment contrer ce bug ...
 
# include <stdio.h>
main() {
 
  char ch = ' ';  
  float a, b, result;
 
   printf("Calculette : \n" );
   while (ch != 'q') {
     fflush(stdin); /* efface le tampon d'entree */
     printf("\n +, -, *, /, q pour quitter : " );
     scanf("%c",&ch);    
     if (ch != 'q') {          
       printf("Entree la premiere valeur : " );
       scanf("%f",&a);
       printf("Entree la seconde valeur : " );
       scanf("%f",&b);
       if (ch == '+') result = a+b;
       else if (ch == '-') result = a-b;
            else if (ch == '*') result = a*b;
                 else if (ch == '/' && b != 0) result = a/b;
                      else {
                         printf("Erreur !!" );
                  continue;
                 } /* if erreur */
       printf("le resultat de %.2f %c %.2f est de %.2f\n",a,ch,b,result);
     } /* if */
   } /* while */
} /* main */


---------------
email : otb82@hotmail.com
Reply

Marsh Posté le 10-09-2001 à 15:54:30   

Reply

Marsh Posté le 11-09-2001 à 09:24:33    

Déjà, moi je commencerai par faire un do ... while plutôt qu'un while, ça fait plus propre puisque tu passes au moins une fois dans ta boucle ... Ensuite tu fais un fflush, c'est bien (quoique, je suis allergique à ce truc :gun:). Mais tu as 2 autres entrées dans ton prog pour a et b ... le fflush doit être placé à l'endroit critique ... mais bon, change ta structure de boucle tu y verras déjà plus clair ;)


---------------
Le meutrier est ... :hot:
Reply

Marsh Posté le 11-09-2001 à 12:25:28    

moi je me suis un peu penche sur ton prog
et j'avoue que je suis impuissant
sous Windows il marche nickel
si je vire le fflush ca marche plus (et c'est normal)
mais sous Linux, le fflush ne fait rien ...
j'ai resume ton probleme a ca :
 
while (ch != 'q')
{  
    fflush(stdin); /* efface le tampon d'entree */  
    printf("\n +, -, *, /, q pour quitter : " );  
    scanf("%c",&ch);      
}
 
et ben ca chie ...
et j'ai pas trouve pourquoi
pourtant je me suis epluche les man, j'ai meme essaye de choper les sources de stdio mais je les avais pas
par contre ton code est (excuse moi) pas top nivo lisibilite
 
utilise plutot un switch() et surtout indente un peu mieux !!!
si tu indentes bien, t'as pas besoin de mettre des /* while */ ou /* if */ ;)
 
while (ch != 'q')
{  
    fflush(stdin); /* efface le tampon d'entree */  
    printf("\n +, -, *, /, q pour quitter : " );  
    scanf("%c",&ch);      
    if (ch != 'q')
    {            
        printf("Entree la premiere valeur : " );  
        scanf("%f",&a);  
        printf("Entree la seconde valeur : " );  
        scanf("%f",&b);  
        if (ch == '+')
            result = a+b;  
        else if (ch == '-')
            result = a-b;  
        else if (ch == '*')
            result = a*b;  
        else
            if (ch == '/' && b != 0)
                result = a/b;  
            else
            {  
                printf("Erreur !!" );  
                continue;  
            }  
        printf("le resultat de %.2f %c %.2f est de .2f\n",a,ch,b,result);  
    }  
}
 
pour ton probleme, je te suggere d'essayer une autre fonction, genre getch() (conio.h)
moi je deteste scanf, justement a cause des merdes comme ca


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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