[C] Problème d'arret dans mon programme

Goldberg

Nouveau membre
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?

----------------------------------------------------------------

#include <stdio.h>
int main()

{
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)

printf("le resultat intermediaire vaut x=%d\n",f);

}; // fin du while

printf("le resultat final vaut x=%d\n",f); // en dehors du while le résultat final !!
return 0;
} //fin prog
 

nicoprog

Grand Maître
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
 
M

Membre supprimé 1

Invité
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 ;)

[cpp]{c=1;
f=a;
while (c < b) {f=a*f,c=c+1;};};break;[/cpp]

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é ?

A+

 

Goldberg

Nouveau membre
cette boucle me permet de calculer la fonction exposant...apprement elle marche sans prob ;-)
 
M

Membre supprimé 1

Invité
[citation=4436,1][nom]goldberg a écrit[/nom]cette boucle me permet de calculer la fonction exposant...apprement elle marche sans prob ;-)
[/citation]

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 :

[cpp]#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[/cpp]
 

Goldberg

Nouveau membre
oui j'avais trouvé qq chose de semblable finalement
un tt grand merci



[cpp]//*Calculatrice binaire à N facteurs*



#include <stdio.h>
int main()

{
int c=1;
int a=0,b=0,f=0; //*vaut mieux forcer à 0 pour éviter les mauvaises surprises*
char t;

printf("entrez une serie de termes, finie par q:\n");

scanf("%d",&a); //*récuperation du premier chiffre*

do //*boucle infinie, un do{}while car on fait au moins une fois la boucle*
{

scanf("%c",&t); //*récupération du caractère*

if( t == 'q' || t =='Q') {printf("le resultat final vaut x=%d\n",f);break;}; //*lorsque 't' devient 'q'
// la boucle s'arrête*
scanf("%d",&b); //*récupération du deuxième chiffre*

switch (t) //*on teste le caractère !!*
{
case '*':f=a*b;break; //*discution de la valeur attribuée à f en fonction de la signification de t*
case '/':f=a/b;break; //*calcul*
case '+':f=a+b;break; //*calcul*
case '-':f=a-b;break; //*calcul*
case '^':c=1; f=a; while (c < b) {f=a*f,c=c+1;};break; //*cas où 't' représentante 'exp'*
};

a=f;

printf("le resultat intermediaire vaut x=%d\n",f);

}while (1); //*fin boucle do{}while*

return 0;
} //*fin prog[/cpp]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 059
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut