IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec un opérateur pour une calculatrice


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut Problème avec un opérateur pour une calculatrice
    Bonjour,
    J'essaie de faire une calculatrice basique qui gère les opérateurs suivants : +,-,*,/
    Mais j'ai un problème avec la multiplication et l'étoile, en effet la multiplication ne marche pas.
    J'ai fait du pas à pas et en fait le programme ne rentre pas dans la condition pour l'étoile quand je passe en paramètre 3 * 5 par exemple.

    Voici mon code, si quelqu'un peut me débloquer, ça serait cool...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <string.h>
    int     main(int argc, char *argv[])
    {
      int count;
      int x;
      int y;
      int res;
      char z[1];
     
      count = 1;
      x = atoi(argv[1]);
      y = atoi(argv[3]);
      if (argc < 3)
        {
          printf('\n');
          return (0);
        }
      strcpy(z,argv[2]);
      if (!strcmp(z,"+"))
        {
          res = x + y;
          printf("%d", res);
        }
      strcpy(z,argv[2]);
      if (!strcmp(z,"-"))
        {
          res = x - y;
          printf("%d", res);
        }
      strcpy(z,argv[2]);
      if (!strcmp(z,"*"))
        {
          res = x * y;
          printf("%d", res);
        }
      strcpy(z,argv[2]);
      if (!strcmp(z,"/"))
        {
          res = x / y;
          printf("%d", res);
        }
    }

  2. #2
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Bonjour,
    Vous pensez gagner du temps en considérant que la ligne de commande existe et en faisant l'économie de quelques tests basiques, voire d'une petite fonction usage(). C'est vous qui voyez, ou plutôt qui verrez "un jour", où est votre intérêt, d'autant que ce type de code est classique, et en général se copie-colle-modifie.
    De même pensez à indenter votre code et à utiliser la balise [CODE].
    Honorez les warnings qui doivent l'être. Il manque par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdio.h>
    #include <stdlib.h>
    et main() doit renvoyer un int.
    La seule erreur que je note (encore que ne rien tester de la ligne de commandes EST une erreir) c'est la ligne:Il faut un const char* et non un char. Par exemple Sinon, votre truc devrait marcher. Quelques consils:
    - Testez votre programme dans ses conditions d'utilisation normales, c'est à dire en console en saisissant les paramètres. En général les paramètres intruduits dans un IDE sont fonctionnels, mais puisque votre problème est à ce niveau, levez le doute.
    - Visualisez vos paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d\t%s\t%s\t%s\n", argc, argv[1], argv[2], argv[3]);
    à ajouter au début.
    - Testez la partie active de votre programme en forçant les valeurs des paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    argc = 4;
    argv[1] = "3";
    argv[2] = "*";
    argv[3] = "5";
    à insérer juste après le précédent.
    D'une façon générale, préférez à ce stade de l'apprentissage ce genre de trace à un pas à pas.

    Je ne vois pas l'intérêt de l'utilisation de z, d'autant que le strcpy va déborder dès que la ligne de commandes ne sera pas ce que vous attendez. Préférez:
    - si vous voulez, tester la longueur de argv[2]
    - puis brancher (switch..case ou autre) en fonction de argv[2][0]...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut
    Merci d'avoir pris le temps de répondre, je vais suivre vos conseils.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/08/2010, 14h19
  2. [EJB3 Entity] Problème avec les annotations pour une List d'Enum
    Par uiscias dans le forum Java EE
    Réponses: 2
    Dernier message: 31/03/2009, 17h09
  3. Réponses: 12
    Dernier message: 11/04/2006, 11h41
  4. problème pour une calculatrice
    Par Anthobask dans le forum C
    Réponses: 4
    Dernier message: 19/12/2005, 21h11
  5. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo