pb pour fermer une boucle (calculatrice)

pb pour fermer une boucle (calculatrice) - C - Programmation

Marsh Posté le 24-05-2009 à 13:36:24    

Bonjour a tous , voila j'ai un petit soucis , je n'arrive pas à fermer la 1ere boucle , en fait après avoir fait une opération simple, je n'arrive pas a retourner vers le menu après que l'opération soit fini.
Je me tourner vers vous pour que vous puissiez m'aider svp :)
 
Merci d'avance  :jap:  
 
 
Voici le debut du programme :) :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.  
  8. long choixMenu;
  9. float a,b;
  10. char o,e;
  11.  
  12. do {
  13.    
  14.    printf("Menu \n" );
  15.    printf("1. Calculatrice basique \n" );
  16.    printf("2. Calculatrice scientifique \n" );
  17.    printf("3. Calculatrice matricielle \n" );
  18.  
  19.    scanf("%d", &choixMenu);
  20.  
  21.    printf("\n" );
  22.    switch (choixMenu) {
  23.           
  24.            case 1:
  25.                 printf ("Entrez votre op%cration: \n",130);
  26.  
  27.                  scanf("%f", &a); //ici, on entre la première valeur
  28.                  printf("%f",a);
  29.  
  30.                  do{
  31.                     printf("debut de la boucle \n" );
  32.                    scanf("%c", &o); //correspond au signe
  33.                    scanf("%f", &b); //correspond à la deuxième valeur
  34.                     scanf("%c", &e);
  35.         
  36.                  printf("%c",o);
  37.                   if (o == '+'){
  38.                     a=a+b;
  39.                     }
  40.                   else if (o == '-'){
  41.                     a=a-b;
  42.                     }
  43.                   else if (o == '*'){
  44.                     a=a*b;
  45.                     }
  46.                   else if (o == '/'){
  47.                     a=a/b;
  48.                      }
  49.                   else{
  50.                       printf("ERROR. \n" ); //conditions d'erreur sur le symbole
  51.                     }
  52.              
  53.             printf("%f \n", a);
  54.  
  55.                 } while (o != 'r'); //fin de boucle des opérations
  56.             
  57.             break;
  58.     
  59.     case 2:
  60.         printf("on en est pas la encore\n\n" );
  61.         break;
  62.         
  63.     case 3:
  64.         printf("sorry\n" );
  65.         break;
  66.     
  67.     default:
  68.         printf("erreur\n" );
  69.  
  70. }    
  71.  
  72. } while (o!='m');
  73.     
  74.  system("PAUSE" );    
  75.  return 0;
  76. }

Message cité 1 fois
Message édité par Elmoricq le 24-05-2009 à 15:27:08
Reply

Marsh Posté le 24-05-2009 à 13:36:24   

Reply

Marsh Posté le 24-05-2009 à 15:01:20    

Tu entre quoi exactement comme entrée pour tester ton truc ?


---------------
By bob.
Reply

Marsh Posté le 24-05-2009 à 15:26:40    

Ceci n'est pas du C++.
 
Je déplace dans la catégorie C et j'ajoute des balises [code] pour plus de lisibilité.

Reply

Marsh Posté le 24-05-2009 à 15:57:49    

J'entre des entiers pour faire des calcul simple par ex des additions etc mais après j'arrive pas a revenir au menu principal  :(

Reply

Marsh Posté le 24-05-2009 à 18:03:46    

Evite les scanf ou alors utilise une focntion qui "purge le clavier" par exemple  

Code :
  1. void clean_stdin(void)
  2. {
  3.     int c;
  4.    
  5.     do {
  6.         c = getchar();
  7.     } while (c != '\n' && c != EOF);
  8. }

à appeler après chaque scanf.

Reply

Marsh Posté le 24-05-2009 à 18:06:25    

Merci , je vais test de suite :)

Reply

Marsh Posté le 24-05-2009 à 22:29:53    

Y'a effectivement un truc qui ne va pas :
 

ajy1 a écrit :


Code :
  1. do {
  2.           ...
  3.    do{
  4.                      ...
  5.    } while (o != 'r'); //fin de boucle des opérations
  6.   ...
  7. } while (o!='m');



 
Pour sortir de ta boucle des opérations, il faut que ta variable "o" soit égale au caractère "r", mais pour revenir au menu, il faut qu'elle soit égale à "m", sachant qu'elle ne change pas de valeur entre-temps. A part une variable quantique, il n'y a pas trop moyen de sortir de ces deux boucles  :D


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 25-05-2009 à 11:19:00    

Turkleton a écrit :

Y'a effectivement un truc qui ne va pas :
 


 

Turkleton a écrit :


 
Pour sortir de ta boucle des opérations, il faut que ta variable "o" soit égale au caractère "r", mais pour revenir au menu, il faut qu'elle soit égale à "m", sachant qu'elle ne change pas de valeur entre-temps. A part une variable quantique, il n'y a pas trop moyen de sortir de ces deux boucles  :D


J'avais vu ce truc aussi, c'est pour ça que je voulais savoir ce qu'il entrait EXACTEMENT au clavier pour tester son truc ...


---------------
By bob.
Reply

Marsh Posté le 25-05-2009 à 22:31:59    

Ou encore fflush(stdin); pour libérer l'input .

Reply

Marsh Posté le 25-05-2009 à 22:36:17    

sauf que à part les lévriers afghans, personne n'utilise fflush(stdin) qui est non-standard, non compatible avec tous les compilateurs ....

Reply

Marsh Posté le 25-05-2009 à 22:36:17   

Reply

Marsh Posté le 25-05-2009 à 22:51:36    

ah wer .... ça existe aussi dans les langages canins la fonction ?
perso avec gcc, ça a toujours marché que ça soit sur windows ou linux.

Message cité 1 fois
Message édité par Nethacker le 25-05-2009 à 22:52:45
Reply

Marsh Posté le 25-05-2009 à 22:58:54    

Sais-tu ce que signifie "non-standard" ?
 
Cela veut dire que le comportement n'est pas décrit par les normes. Et donc que tu ne peux être sûr de ce que cela va donner, en fonction de l'OS sur lequel ça tourne, ET en fonction du compilateur utilisé.
 
Après, tu fais c'que tu veux, hein.

Reply

Marsh Posté le 26-05-2009 à 08:18:42    

Nethacker a écrit :

ah wer .... ça existe aussi dans les langages canins la fonction ?
perso avec gcc, ça a toujours marché que ça soit sur windows ou linux.


La norme dit que le comportement de fflush() n'est défini que sur les flux sortants. stdin est un flux entrant. Le comportement est donc indéterminé.

 

Sous DOS/Windows, il est possible que dans des cas plus ou moins spécifiés (lire la doc de chaque compilateur), l'usage de fflush() avec stdin soit défini. Mais ce n'est pas standard, et donc, ce comportement n'est pas garanti. Une solution standard et portable a été indiquée.

 

http://www.bien-programmer.fr/notes.htm#saisie
http://www.bien-programmer.fr/notes.htm#fichiers


Message édité par Emmanuel Delahaye le 26-05-2009 à 08:19:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed