Problème en langage C

fahim0788 Messages postés 111 Statut Membre -  
 lami20j -
Bonjours, ce programme ressemble à une petite calculette, on saisit un opérateur et deux entiers et il retourne le résultat de l'opération correspondante et cela tanque l'utilisateur répond par une touche déffirente de 'Q' qui signifie <Quitter>, le problème est que malgré la saisie du 'Q' le programme redemande de saisir un opérateur et deux entiers si quelqu'un voit pourquoi merci d'avance de m'avoir informer,

#include <stdio.h>
#include <stdlib.h>

char lireCaractere()
{
    char caractere='q';
    caractere = getchar();
    while (getchar() != '\n');
    return caractere;
}

 void main()
{
    char op,r='0';
    int x,y;
    while(r!='Q'){
        printf("\n Introduisez un operateur: ");
        op=lireCaractere();
        printf(" \n x = ");
        scanf("%d",&x);
        printf("\n y = ");
        scanf("%d",&y);
        switch(op){
            case '+':printf("\n %d + %d = %d ",x,y,x+y);break;
            case '-':printf("\n %d - %d = %d ",x,y,x-y);break;
            case '*':printf("\n %d * %d = %d ",x,y,x*y);break;
            case '/':printf("\n %d / %d = %d ",x,y,x/y);break;
            case '%':printf("\n %d mod %d = %d ",x,y,x%y);break;
            default :printf("\n Introduisez un operateur correct!");
        }
        printf("\n Appuyer sur Q pour quitter ou autre touche pour continuer: ");
        r=lireCaractere();
    }
}
Configuration: Windows Vista Internet Explorer 8.0

2 réponses

  1. Profil bloqué
     
    mince je m'en rappelle plus du langage C Y_Y
    mais bon si tu veuw avoir une reponse a coup sur va sur www.siteduzero.com et poste sur le forum
    P.S: n'oublie pas de t'inscrire (gratuit et rapide)
    0
  2. lami20j
     
    Salut,

    La fonction lireCaractere n'est pas vraiment nécessaire vu que tu peux utiliser directement getchar()
    Je pense aussi que le message de la clause default: apparaît trop tard (c'est-à-dire après avoir saisi x et y).
    Tant qu'on a taper autre chose qu'une opération prevue, autant afficher le message toute de suite que l'opérateur n'est pas bon.
    Tu peux penser à rémedier ça.
    N'oublie pas de gérer aussi la division avec zéro.

    #include <stdio.h>
    #include <stdlib.h>
    
    char lireCaractere()
    {
        return getchar();
    }
    
    
    int main()
    {
        char op,r='0';
        int x,y;
        while(r!='Q'){
            printf("\n Introduisez un operateur: ");
            op=lireCaractere();
            printf(" \n x = ");
            scanf("%d",&x);
            printf("\n y = ");
            scanf("%d",&y);
            switch(op){
                case '+':
                        printf("\n %d + %d = %d ",x,y,x+y);
                        break;
                case '-':
                        printf("\n %d - %d = %d ",x,y,x-y);
                        break;
                case '*':
                        printf("\n %d * %d = %d ",x,y,x*y);
                        break;
                case '/':
                        printf("\n %d / %d = %d ",x,y,x/y);
                        break;
                case '%':
                        printf("\n %d mod %d = %d ",x,y,x%y);
                        break;
                default :
                        printf("\n Introduisez un operateur correct!");
    		    break;
            }
            printf("\n Appuyer sur Q pour quitter ou autre touche pour continuer: ");
            while (getchar() != '\n');
            r=getchar();
        }
        return EXIT_SUCCESS;
    }
    0