Mon "While" fausse le résultat de mon calcul

Le problème exposé dans ce sujet a été résolu.

Bonjour! Je suis nouveau dans C++, j’essaie de faire une calculatrice, mais le résultat est faussé quand j’utilise une boucle "While" pour vérifier si l’utilisateur saisit le bon opérateur. Aidez-moi, s’il vous plait!

#include <iostream>

using namespace std;

int main() { double x, y; double total = 0; char op; cout«"Enter your first number: "; cin»x; cout«"Enter your second number: "; cin»y; cout«"Enter an operator: "; cin»op;

switch(op){

case '+’: total = x+y; break;

case '-’: total = x-y; break;

case '': total = xy; break; }

while((op != '+’) || (op != '-’) || (op != '*’)){ cout«"Bad operator. Enter en operator: "«endl; cin»choix; }

cout«"Total:"«total«endl; return 0; }

#include <iostream>

using namespace std;

int main()
{
  double x, y;
  double total = 0;
  char op;
  cout<<"Enter your first number: ";
  cin>>x;
  cout<<"Enter your second number: ";
  cin>>y;
  cout<<"Enter an operator: ";
  cin>>op;

switch(op){

  case '+':
    total = x+y;
    break;

  case '-':
    total = x-y;
    break;

  case '*':
    total = x*y;
    break;
}

while((op != '+') || (op != '-') || (op != '*')){
  cout<<"Bad operator. Enter en operator: "<<endl;
  cin>>choix;
}

cout<<"Total:"<<total<<endl;
return 0;
}

lesagejeanjean

Je me suis permis de formater le code (tu peux le faire avec la touche </> de la barre d’outils) histoire que ce soit plus lisible pour tous :)


Le problème vient du fait que tu fais le calcul avant de vérifier l’opérateur. En l’état, tu demandes l’opéateur, tu fais le calcul (dans le switch), puis tu vérifies que l’opérateur est le bon, et quand il est bon tu… affiches le résultat calculé avant la vérification.

Il faudrait faire la vérification avant.

Aussi, ici, tu ne stockes pas le nouveau choix dans la bonne variable, ce qui fait que je soupçonne un boucle infinie en cas d’erreur d’opérateur… Je suis d’ailleurs surpris que ça compile ^^ .

while((op != '+') || (op != '-') || (op != '*')){
  cout<<"Bad operator. Enter en operator: "<<endl;
  cin>>choix;  // devrait être >> op
}
+2 -0

Merci pour votre réponse, Amaury. Mais je ne suis pas sûr de comprendre ton explication. Au départ, j’avais mis la boucle while avant le switch, mais cela ne change rien. Quand j’essaie de saisir un caractère différent des opérateurs(juste pour tester), le message de saisie s’affiche, je saisis un bon opérateur et le même message s’affiche a nouveau. Pour la variable, j’avais changé "choix" en "op" car je demandais de l’aide sur un site anglophone et j’avais oublié de la modifier dans le message d’erreur. Donc, je ne dois pas faire le calcul dans le switch? Peux-tu corriger le code pourmoi, s’il te plait?

Ta condition dans la boucle while devrait être while(op != '+' && op != '-' && op != '*')sinon quand tu essaies d’entrer * par exemple, le programme va d’abord tester si '*' != '+' ce qui est vrai donc tu vas passer par la boucle une nouvelle fois.

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte