Partage
  • Partager sur Facebook
  • Partager sur Twitter

L'utilisation d'un switch

Dans une "calculatrice"

Sujet résolu
Anonyme
    22 octobre 2017 à 21:36:40

    Salutations !

    Je suis en train d'apprendre le C avec le livre de Claude Delannoy et en essayant de faire une "calculatrice" (c'est un assez grand mot pour mon programme en fait :D), j'ai cru bien faire en utilisant un switch comme ceci :

    #include <stdio.h>
    
    int main(void)
    {
    	int operande_1;
    	char operateur;
    	int operande_2;
    
    	printf("Bonjour !\n");
    	printf("Je m'apelle GCalculator ! Je vais faire les calculs de ton choix !\n");
    	printf("Entrez un calcul :\n");
    	while(1)
    	{
    		scanf("%d %c %d", &operande_1, &operateur, &operande_2);
    		switch (operateur)
    		{
    			case "+" : printf("%d\n", operande_1 + operande_2);
    			case "-" : printf("%d\n", operande_1 - operande_2);
    			case "*" : printf("%d\n", operande_1 * operande_2);
    			case "/" : printf("%d\n", operande_1 / operande_2);
    			case "%" : printf("%d\n", operande_1 % operande_2);
    		}
    	}
    	return 0;
    }

    Le problème, c'est que mon compilateur me sort cette erreur :

    error: case label does not reduce to an integer constant

    Pour chaque case.
    Je ne sais pas d'où viens l'erreur. En effet, (je ne sais pas si j'ai bien compris mais : ) normalement, la valeur qui suis un case doit être une constante de type int. Étant donné des conversions systématiques, les caractères (type char) sont normalement convertis en int automatiquement... Les cases ne devraient donc pas me fournir d'erreur de ce type :(...

    J'ai peut-être fait une erreur que je n'ai pas remarqué ? Où cette écriture n'est définitivement pas légale ?

    J'espère que vous saurez m'aider,

    Bien à vous,

    Gabriel.

    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2017 à 21:59:41

      Salut,

      1 // int
      '1' // char (type entier)
      "1" // chaîne de caractères


      ^^

      Edit : Tu oublies des break dans le switch non ? C'est volontaire ?

      -
      Edité par Gam' 22 octobre 2017 à 22:01:57

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        22 octobre 2017 à 22:06:16

        Gam' a écrit:

        Salut,

        1 // int
        '1' // char (type entier)
        "1" // chaîne de caractères


        ^^

        Edit : Tu oublies des break dans le switch non ? C'est volontaire ?

        -
        Edité par Gam' il y a moins de 30s

        Hey !

        Merci pour ta réponse super rapide !

        Pour les break, c'est fait exprès, je n'ai pas encore fini mais l'utilisateur est censé entrer "quit" pour quitter le programme ( d'où la boucle infinie, elle se terminera lorsqu'il aura tappé "quit" ).

        Et merci pour la petite précision ^^. Normalement, j'ai pour habitude de développer sur du PHP et du Lua et cette notion n'existe pas à ma connaissance :p.

        Bref, problème résolu ! Merci encore Gam' !

        EDIT :

        Si tu parlais des break du switch, en effet, ce n'étais pas volontaire :lol:.

        Encore merci !

        -
        Edité par Anonyme 22 octobre 2017 à 22:11:41

        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2017 à 10:44:02

          Gam' a écrit:

          Salut,

          1 // int
          '1' // char (type entier)
          "1" // chaîne de caractères



          1   // int
          '1' // int
          "1" // char[2]
          
          



          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2017 à 11:27:39

            Gabriel SANTAMARIA a écrit:


            Edit : Tu oublies des break dans le switch non ? C'est volontaire ?

            -
            Edité par Gam' il y a moins de 30s

            Hey !

            Merci pour ta réponse super rapide !

            Pour les break, c'est fait exprès, je n'ai pas encore fini mais l'utilisateur est censé entrer "quit" pour quitter le programme ( d'où la boucle infinie, elle se terminera lorsqu'il aura tappé "quit" ).

            Le break dont on te parle n'est pas là pour s'occuper de la sortie du programme, mais pour terminer chacun des cas du switch.

            LUA n'a pas d'instruction switch, mais c'est la même notion en PHP. http://php.net/manual/fr/control-structures.switch.php

            switch ($i) {
                case 0:
                    echo "i égal 0";
                    break;
                case 1:
                    echo "i égal 1";
                    break;
                case 2:
                    echo "i égal 2";
                    break;
            }



            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 octobre 2017 à 12:04:02

              michelbillaud a écrit:

              Gabriel SANTAMARIA a écrit:

              Edit : Tu oublies des break dans le switch non ? C'est volontaire ?

              -
              Edité par Gam' il y a moins de 30s

              Hey !

              Merci pour ta réponse super rapide !

              Pour les break, c'est fait exprès, je n'ai pas encore fini mais l'utilisateur est censé entrer "quit" pour quitter le programme ( d'où la boucle infinie, elle se terminera lorsqu'il aura tappé "quit" ).

              Le break dont on te parle n'est pas là pour s'occuper de la sortie du programme, mais pour terminer chacun des cas du switch.

              LUA n'a pas d'instruction switch, mais c'est la même notion en PHP. http://php.net/manual/fr/control-structures.switch.php

              switch ($i) {
                  case 0:
                      echo "i égal 0";
                      break;
                  case 1:
                      echo "i égal 1";
                      break;
                  case 2:
                      echo "i égal 2";
                      break;
              }

              Hey !

              Merci pour ta réponse mais j'avais édité mon message en disant qu'effectivement j'avais oublié les break du switch :lol:
              Bref, merci à vous tous pour vos réponses !

              EDIT :

              Aussi, lorsque je disais de "cette notion n'existe pas [...]", je parlais de la différence entre 'caractere' et "caractere"


              -
              Edité par Anonyme 23 octobre 2017 à 12:06:24

              • Partager sur Facebook
              • Partager sur Twitter

              L'utilisation d'un switch

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown