Probleme calculatrice c++

Bonjour, a tous je me suis lancer dans la programmation en c++ avec un livre j'ai fait le 1er chapitre qui m'apprener a faire un jeux en utilisante les boucle les variable j'ai reussi a faire le jeux et a le comprendre j'ai voulut donc essayer de faire une calculatrice mais j'y arrive pas voila mon code source :

#include <iostream>
using namespace std;

void main (void)
{
int a,b,c,p,m,mu,d;

cout << " Bienvenue ! "
<< " Veuillez choisir le signe de l'operation (plus(p);moins(m);multiplier(mu);diviser(d)) "
<< endl;
cin >> c;

if (c == p)
{
cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
cin >> a
>> b;

cout << "Le resultat est : " << a+b << endl;
}
if (c == m)
{
cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
cin >> a
>> b;

cout << " Le resulat est : " << a-b << endl;
}
if (c == mu)
{
cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
cin >> a
>> b;

cout << " Le resultat est : " << a*b << endl;
}
if (c == d)
{
cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
cin >> a
>> b;

cout << " Le resultat est : " << a/b << endl;
}
}



--
SI ta cherche sur google et que tu ne trouve rien il reste CCM
Et surtout no'ublie pas que google et ton ami

4 réponses

Résumé de la discussion

Le problème porte sur une calculatrice écrite en C++, où le programme utilise des variables int pour l’entrée et compare c à p, m, mu et d pour choisir l’opération. Des corrections essentielles incluent de traiter l’opérateur comme un caractère unique et de comparer c avec 'p', 'm', 'u' et 'd' via un switch, utilisant int main() et return 0. Pour éviter les saisies multiples et les confusions, lire a et b séparément après l’opérateur, puis afficher le résultat et corriger les messages d’invite et les fautes d’orthographe. En pratique, il peut être utile d’adopter une structure simple avec des variables numériques pour a et b et d’éviter les chaînes, ce qui facilite le débogage et la compilation.

Bobot (l’IA à votre service)
  1. Modérateur
    Lorsque tu fais if (c==p) par exemple, en fait c'est (c=="p") qu'il faut mettre.
    Du coup les variables p, m, mu, et d ne servent à rien.

    De plus c est déclaré comme de type int, il est évident que ce sera un string !
    Il te manquera plus que #include <string> à mettre et ça marchera...

    Remarque : normalement la méthode main renvoie un int (0 en cas de succès)
    La confiance n'exclut pas le contrôle
    1
    1. je vais essayer ce que tu ma dit
      0
    2. le nouveau code source mais sa marche toujours pas :

      #include <iostream>
      using namespace std;
      #include <string>

      void main (void)
      {
      int a,b,c,p,m,mu,d;

      cout << " Bienvenue ! "
      << " Veuillez choisir le signe de l'operation (plus(p);moins(m);multiplier(mu);diviser(d)) "
      << endl;
      cin >> c;

      if (c=="p")
      {
      cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
      cin >> a
      >> b;

      cout << "Le resultat est : " << a+b << endl;
      }
      if (c=="m")
      {
      cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
      cin >> a
      >> b;

      cout << " Le resulat est : " << a-b << endl;
      }
      if (c=="mu")
      {
      cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
      cin >> a
      >> b;

      cout << " Le resultat est : " << a*b << endl;
      }
      if (c=="d")
      {
      cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
      cin >> a
      >> b;

      cout << " Le resultat est : " << a/b << endl;
      }
      }
      0
    3. Modérateur
      Remarque : Comme tu as toujours besoin de a et b, tu peux faire cin >> a >> b, une fois pour toutes avant tous les if, et de même calculer le résultat dans chaque if, mais ne faire l'affichage qu'à la fin.

      Ça évite les copier-coller, et simplifie le programme
      0
    4. Modérateur
      Je t'ai donné 4 modifications à effectuer et tu n'as fait que la première... continue !
      0
  2. Modérateur
    oh la...
    j'ai les yeux qui saignent...
    avant même de savoir si le code fonctionne ou pas...

    il faut commencer par revoir l'algo...

    il faut saisir les chiffres avant de saisir l'opérateur.
    il faut utiliser un case pour les opérations et non 4 si,
    il faut utiliser une seule ligne d'affichage

    et tu saisies un caractere.. pardon une chaine (pour le mu) dans un int...
    donc c'est sur de pas marcher...

    au passage, utilises des variables réprésentative dans ton code..
    et un peu de controle de saise ne serait pas de trop (entre autre pour la division par zéro)

    bref : 1/10, pour les impulsions électrique...

    Stop failing the turing test !
    0
    1. je début c'est normal que je fasse des erreurs
      0
    2. je sais pas pour quoi le virtual c++ bug il veux plus ce lancer bien
      0
    3. Modérateur
      en fait, le problème ici n'est pas au niveau du langage C++ (l'histoire des int/char est pas si terrible comme erreur)
      le problème est niveau de la façon de penser...
      c'est quelque chose que tu n'apprendras ni dans les livres, ni dans les sites internet.

      que tu ne connaisse pas encore les case, les whiles pour faire la vérif, ok.

      par contre, afficher une seule fois la ligne de saisie et une seule fois la ligne d'affichage, c'est la base, c'est pour ça que tu fais un programme.
      Si tu ne commence pas à réfléchir à ça dès le début, tu ne seras qu'un codeur, et pas un programmeur, et quand tes programmes commenceront à etre vraiment complexe, tu n'arriveras plus à rien.
      0
    4. Modérateur
      "je sais pas pour quoi le virtual c++ bug il veux plus ce lancer bien"
      pas grave, fais ce qu'on t'a dis sur papier, on sera capable de te dire si c'est bon ou pas...
      0
    5. #include <iostream>
      using namespace std;
      #include <string>

      void main (void)
      {
      int a,b,c;

      cout << " Bienvenue ! " << " Veuillez choisir le signe de l'operation (plus(p);moins(m);multiplier(mu);diviser(d)) " << endl;
      cin >> c;

      if (c=="p")

      cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
      cin >> a >> b;

      cout << "Le resultat est : " << a+b << endl;

      if (c=="m")

      cout << "Veulliez choisir le chiffre a et le chiffre b" << endl;
      cin >> a >> b;

      cout << " Le resulat est : " << a-b << endl;

      if (c=="mu")

      cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
      cin >> a >> b;

      cout << " Le resultat est : " << a*b << endl;

      if (c=="d")

      cout << " Veulliez choisir le chiffre a et le chiffre b " << endl;
      cin >> a >> b;

      cout << " Le resultat est : " << a/b << endl;

      }

      Le nouveau code mais j'ai des erreur par rapport au ==
      0
  3. #include <iostream>
    #include <cstring> ou #include <string> // J'ai un doute
    using namespace std;

    void main
    {
    int a,b, res;
    string rep;

    cout << " Bienvenue ! "
    << " Veuillez choisir le signe de l'operation (plus(p);moins(m);multiplier(mu);diviser(d)) "
    << endl;
    cin >> rep;
    cout<<"Veuillez choisir vos deux entiers a et b"<<endl;

    if (rep=="p")
    res=a+b;

    if (rep=="m")
    res=a-b;

    if (c=="mu")
    res=a*b;

    if (c=="d")
    res=a/b;

    cout<<"Le resultat est "<<res<<endl;
    }
    0
    1. Ca devrait fonctionner, après pour rendre le code plus "propre", tu peux faire un switch () case ...
      0
    2. Modérateur
      Franchement, ça aussi on sait faire... mais quel intérêt dans l'apprentissage ?
      0
    3. merci mais tu peux me dire a quoi sert string stp
      0
    4. Modérateur
      Et c'est #include <string> car <cstring> manipule les char* en C
      0
    5. Modérateur
      mes souvenirs de c++ sont vieux (10 ans), mais il manque pas l'affectation de Valeur1 et Valeur2... pardon a et b ?
      0
  4. voici le nouveau code il me manquerai un truc pour que ce soit parfait c'est que quand sa recommence que la console ce vide...

    #include <iostream>
    using namespace std;
    #include <string>

    void main (void)
    {

    while(true)
    {

    int a,b,res;
    string rep;

    cout << " Bienvenue ! " << " Veuillez choisir le signe de l'operation (+;-;*;/) " << endl;
    cin >> rep;
    if ((rep=="/")||(rep=="*")||(rep=="-")||(rep=="+")) // si les signe sont bon il continue le programme
    {
    cout << "Veulliez choisir a et b : " << endl;
    cout << "a= ";
    cin >> a;
    cout << "b= ";
    cin >> b;

    if (rep=="+")

    res = a + b;

    if (rep=="-")

    res = a - b;

    if (rep=="*")

    res = a * b;

    if (rep=="/")

    {if (b!=0)
    {res = a / b;
    cout << " Le resultat est : " << res << endl; // obliger de mettre sa sinon il m'afficher pas le resultat
    system("Pause");
    }
    else
    cout << " Erreur on ne peux pas diviser par 0 !!" << endl;
    continue;
    }

    cout << " Le resultat est : " << res << endl;
    system("Pause");
    }
    else
    cout << " Vous n'avez pas rentrez (+;-;*;/). Veulliez recommencez !!" <<endl;
    continue;
    }
    }
    0
    1. Modérateur
      Dire que c'est "parfait" est un peu exagéré je trouve ;-)
      Pour effacer la console Windows tu peux utiliser system("CLS");
      0
    2. ben c'est mon programme donc il est parfait pour moi lol ^^
      merci pour la commande je vais l'intégrer dans mon programme
      0
    3. Modérateur
      ce qui me dérange, c'est l'utilisation du while...
      manifestement, tu connais le while vu que tu en utilise un
      et tu l'utilise... pour rien (du moins de mon point de vue, si tu veux faire tourner ton programme en boucle, tu dois au moins autoriser une sortie propre, par exemple entrer q en opérateur)...
      alors que 6 lignes plus bas tu utilise un if à la place d'un while pour assurer la saisie du bon opérateur (l'idée est de demander la saisie de l'opérateur jusqu'a ce que ça soit bon) avant de continuer le programme.
      du coup, tu as moins besoin d'embriquer, et ton programme est plus facile à lire
      0
    4. sa fait pareil enfin pour moi parce que si le if n'est pas le bon il recommence
      0
    5. a oui il y a juste un truc j'arrive pas a mettre un autre variable a "a" et "b" car du coup la variable ne prend pas en compte les grand nombre ni les virgule donc j'aurai voulut mettre double mais quand je lance le debug il me dit que je peux pas
      0