Bonjour tt le monde, je débute ds la programmation en c. Ds un exercice on me demande de réaliser une calculatrice binaire du type permettant de réaliser des opérations du type :
3+8*20-85/2q, la chaine est de longueur variable et doit se finir par un q (q indique la fin du prog)
mon problème est le suivant : qd je mets un q à la fin de mon prog, celui-ci ne s'arrete pas directement..où pourrait se trouver mon erreur?
{ int c,e,a=0,b=0,f=0; // vaut mieux forcer à 0 sinon dans certains programmes on aura de mauvaises surprises
char t; //t représente +,-,*,/ ou ^
printf("entrez une serie de termes:\n" );
scanf("%d",&a); //je prends le premier terme hors de la boucle
while (e!=1)
{
scanf("%c",&t); //je prends le premier caractère
scanf("%d",&b); //je prends le second terme
switch (t) { case '*':f=a*b;break; // discution de la valeur attribuée à f en fonction de la signification de t
case '/':f=a/b;break; case '+':f=a+b;break; case '-':f=a-b;break; case '^':{c=1;
f=a;
while (c < b) {f=a*f,c=c+1;};};break;
case 'q':e=1;break;
};
a=f; //je donne à a la valeur de f et je recommence la boucle tant qu'un "q" n'apparrait pas (càd e=1)
si tu met 3+2*6 tu devrai obtenir 30 alors que le vrai résultat est 15, tu devrai revoir sa sinon je vois pas pq le prog ne se quitte pas sa ne marcherai pas
pour voir tu peux essayer de tester avec 2+3+4q puis avec 2+3q+4 pour voir les resultats
Déja ton e n'est pas initialisé donc à ta première entrée dans la boucle tant que e != 1 ca va poser des problèmes
Ensuite lorsque tu vas mettre q dans le scanf("%c",&t);
Il va tout de même te demander la valeur de b jute après car le scanf("%c",&b); est tout de même exécuté, je pense que c'est pour cela que tu dis que ton prog ne s'arrête pas tout de suite ?
Quand à cette boucle, euuh relis ce que t'as écris
Code :
{c=1;
f=a;
while (c < b) {f=a*f,c=c+1;};};break;
Sinon euh fais gaffe le symbole "/" c'est la division entière hein, t'as vérifié que c'était ce qui était demandé dans l'énnoncé ?
cette boucle me permet de calculer la fonction exposant...apprement elle marche sans prob ;-)
Ben oui mais non
En plus j'avais pas vu mais t'as mis plein de ; après les parenthèses de fin de switch et de while ... ca ne se fait pas
Pareil pour ta boucle d'exposant.
Et j'espère que t'as bien vu que tu n'avais pas initialisé e ! C'est problématique.
Et t'as bien compris pourquoi ton prog ne se termine pas lorsque tu tape 'q' ?
D'autre part, si tu as des problèmes avec tous tes scanf() regroupés, utilise fflush(stdin); qui te donnera un résultat correct à l'écran.
J'ai clarifié un peu ton code çi dessous en virant le e pour qu'il s'arrête dès que l'utilisateur tape q :
Code :
#include <stdio.h>
int main()
{
int c,a,b,f;
char t;
printf("entrez une serie de termes:\n" );
scanf("%d",&a);
f=a;
while (1)
{
scanf("%c",&t);
if (t == 'q') {printf("le resultat final vaut x=%d\n",f); return 0; }
scanf("%d",&b);
switch (t)
{
case '*': f=a*b; break;
case '/': f=a/b; break;
case '+': f=a+b; break;
case '-': f=a-b; break;
case '^': c=1;
f=a;
while (c < b) {f=a*f; c=c+1;} break;
}
a=f;
printf("le resultat intermediaire vaut %d\n",f);
}
} //fin prog
Message édité par Anonyme le 15-02-2004 à 23:28:23