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

a marqué ce sujet comme résolu.
Auteur du sujet

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; }

+0 -0

Cette réponse a aidé l’auteur du sujet

#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
}

#JeSuisArius ⋅ Mon blog scientifiqueLe Pitit Bac

+2 -0
Auteur du sujet

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?

+0 -0

Cette réponse a aidé l’auteur du sujet

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.

Édité par Skodt

+2 -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