Problème en langage C

Fermé
fahim0788 Messages postés 111 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 19 décembre 2011 - 12 janv. 2010 à 12:11
 lami20j - 12 janv. 2010 à 14:11
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();
    }
}
A voir également:

2 réponses

Profil bloqué
12 janv. 2010 à 12:50
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
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