Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3073 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pb pour fermer une boucle (calculatrice)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb pour fermer une boucle (calculatrice)

n°1887341
ajy1
Posté le 24-05-2009 à 13:36:24  profilanswer
 

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
mood
Publicité
Posté le 24-05-2009 à 13:36:24  profilanswer
 

n°1887359
superbob56
Posté le 24-05-2009 à 15:01:20  profilanswer
 

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


---------------
By bob.
n°1887361
Elmoricq
Modérateur
Posté le 24-05-2009 à 15:26:40  profilanswer
 

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

n°1887362
ajy1
Posté le 24-05-2009 à 15:57:49  profilanswer
 

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  :(

n°1887380
Trap D
Posté le 24-05-2009 à 18:03:46  profilanswer
 

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.

n°1887381
ajy1
Posté le 24-05-2009 à 18:06:25  profilanswer
 

Merci , je vais test de suite :)

n°1887436
Turkleton
I don't quite understand you
Posté le 24-05-2009 à 22:29:53  profilanswer
 

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
n°1887525
superbob56
Posté le 25-05-2009 à 11:19:00  profilanswer
 

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.
n°1887814
Nethacker
rule televisions, rule minds
Posté le 25-05-2009 à 22:31:59  profilanswer
 

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

n°1887816
Joel F
Real men use unique_ptr
Posté le 25-05-2009 à 22:36:17  profilanswer
 

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

mood
Publicité
Posté le 25-05-2009 à 22:36:17  profilanswer
 

n°1887820
Nethacker
rule televisions, rule minds
Posté le 25-05-2009 à 22:51:36  profilanswer
 

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
n°1887824
Elmoricq
Modérateur
Posté le 25-05-2009 à 22:58:54  profilanswer
 

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.

n°1887854
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2009 à 08:18:42  profilanswer
 

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/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pb pour fermer une boucle (calculatrice)

 

Sujets relatifs
Boucle For & If ImbriquésProblème d'affichage double boucle (mysql_fetch_array)
problème boucle whileFonction récursive de parcours d'un arbre xml qui boucle indéfiniment
fermer la fenêtre cmd.exemettre une animation en boucle sur psp
boucle sur colonne[PHP} Probleme boucle
Boucle while imbriquéemettre une requete dans une boucle qui fonctionne
Plus de sujets relatifs à : pb pour fermer une boucle (calculatrice)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR