FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » [C] Problème d'arret dans mon programme
 

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

1 utilisateur anonyme et 109 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [C] Problème d'arret dans mon programme
 
Plus d'informations

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


Message édité par Goldberg le 12-02-2004 à 11:55:19

Help us take back the web!
Plus d'informations

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

Plus d'informations

non ça va j'ai trouvé ;-)
merci qd même

Plus d'informations

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 :
  1. {c=1;
  2.           f=a;
  3.           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é ?
 
A+
 

Plus d'informations

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

Plus d'informations

goldberg a écrit :

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 :
  1. #include <stdio.h> 
  2. int main() 
  3. int c,a,b,f;
  4. char t;
  5. printf("entrez une serie de termes:\n" ); 
  6. scanf("%d",&a);
  7. f=a;
  8. while (1)
  9.   scanf("%c",&t);
  10.   if (t == 'q') {printf("le resultat final vaut x=%d\n",f);  return 0; }
  11.   scanf("%d",&b);
  12.   switch (t)
  13.          {
  14.           case '*': f=a*b; break;
  15.           case '/': f=a/b; break;
  16.           case '+': f=a+b; break;
  17.           case '-': f=a-b; break;
  18.           case '^': c=1;
  19.                     f=a;
  20.           while (c < b) {f=a*f; c=c+1;} break;
  21.           }
  22.   a=f;
  23.   printf("le resultat intermediaire vaut %d\n",f);
  24. }
  25. } //fin prog


Message édité par Anonyme le 15-02-2004 à 23:28:23
Plus d'informations

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

Code :
  1. //*Calculatrice binaire à N facteurs par Vincent Roloux*
  2. #include <stdio.h>  
  3. int main()  
  4. {  
  5. int c=1;  
  6. int a=0,b=0,f=0; //*vaut mieux forcer à 0 pour éviter les mauvaises surprises*
  7. char t;  
  8. printf("entrez une serie de termes, finie par q:\n" );  
  9. scanf("%d",&a); //*récuperation du premier chiffre*
  10. do //*boucle infinie, un do{}while car on fait au moins une fois la boucle*  
  11. {  
  12. scanf("%c",&t); //*récupération du caractère*
  13. if( t == 'q' || t =='Q') {printf("le resultat final vaut x=%d\n",f);break;}; //*lorsque 't' devient 'q'  
  14.                                                                              // la boucle s'arrête*
  15. scanf("%d",&b); //*récupération du deuxième chiffre*  
  16. switch (t) //*on teste le caractère !!*  
  17.   {  
  18.    case '*':f=a*b;break; //*discution de la valeur attribuée à f en fonction de la signification de t*  
  19.    case '/':f=a/b;break; //*calcul*  
  20.    case '+':f=a+b;break; //*calcul*
  21.    case '-':f=a-b;break; //*calcul*
  22.    case '^':c=1; f=a; while (c < b) {f=a*f,c=c+1;};break; //*cas où 't' représentante 'exp'*
  23.   };  
  24. a=f;  
  25. printf("le resultat intermediaire vaut x=%d\n",f);  
  26. }while (1); //*fin boucle do{}while*  
  27. return 0;  
  28. } //*fin prog


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » [C] Problème d'arret dans mon programme
 

Annonces Google
Publicité