Partage
  • Partager sur Facebook
  • Partager sur Twitter

Switch et chaîne de caractère

Sujet résolu
    8 mars 2006 à 15:26:23

    Salut,

    Je suis en train de faire un programme qui prend en charge des commandes, mais j'ai un léger problème. Voiçi le code :

    void instance()
    {
         char cmd[50];

         system("cls");
         printf("Taper votre commande : ");
         scanf("%s"‚ cmd);
         switch(cmd)
         {
                      case "message":
                           printf("Bravo\n");
                           system("pause");
                           break;
                      default:
                              printf("Nul!!!!\n");
                              system("pause");
         }
    }


    Voilà mon problème : Le programme ne se compile pas en me disant qu'il y a un problème pour la variable que prend le switch. J'ai donc essayer avec un if, là sa se compile mais lorsque j'entre un mot mon programme quitte sans prévenir. Aidez-moi SVP!!!
    • Partager sur Facebook
    • Partager sur Twitter
      8 mars 2006 à 15:33:16

      On ne compare pas une chaine avec '=='.
      Il faut utiliser strcmp.

      Ici :

      if (strcmp(cmd‚ "message")==0) {
          printf("Bravo !");
          getchar();
      }

      else printf("Nul ! \n");

      getchar();
      return 0;
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 mars 2006 à 15:43:13

        Au passage, dans un case du switch on ne peut mettre que des expressions constantes de type entier, donc pas de chaînes (qui sont en fait des pointeurs).
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          8 mars 2006 à 15:46:52

          Au fait louisclem, à propos de case, peut on faire
          switch (machin)
          {
              case 'a':
          //code
          }
          • Partager sur Facebook
          • Partager sur Twitter
            8 mars 2006 à 15:52:29

            Que des strcmp ? ZUT!!! Ca va être long pour faire mon truc bon ba merci !!!
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              8 mars 2006 à 15:53:56

              Oui, car un char fait partie des types entier (avec int, short, long et leurs versions unsigned), d'ailleurs une constante caractère entre ' ' est de type int ^^ et constante biensûr, donc on peut.
              • Partager sur Facebook
              • Partager sur Twitter
                8 mars 2006 à 16:20:49

                Citation : Nesquik69

                Que des strcmp ? Ca va être long pour faire mon truc


                En effet. On peut utiliser

                if(strcmp(...)==0)
                else if(strcmp(...)==0)
                else if(strcmp(...)==0)
                else

                pour, disons, une 20aine de chaines, parce que c'est simple à coder. Mais ce n'est pas très efficace. Ensuite, on peut mettre les chaines dans un tableau trié, et faire une recherche dichotomique (binaire) de la position avec, par exemple la fonction standard bsearch(). Ca va pour quelques milliers de chaines. Au-dessus, on utilise des techniques plus hardues comme le hashcode...
                Arf!

                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  8 mars 2006 à 16:34:09

                  Citation : louisclem

                  Oui, car un char fait partie des types entier (avec int, short, long et leurs versions unsigned), d'ailleurs une constante caractère entre ' ' est de type int ^^ et constante biensûr, donc on peut.

                  Ok d'accord merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 mars 2006 à 17:00:08

                    Mais attendez!!! Y'a problème!!! Si je veux faire une commande "quitter". Il faudra que je créé une chaîne qui va receptionner la commande (ici "quitter") dans une chaîne (c'était mon intention jusque là) mais ensuite il faut que je créé une deuxième chaîne qui contiendra par défaut le mot quitter et ensuite comparer les deux? Mais alors je vais avoir une variable pour chaque commande ? :euh:
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      9 mars 2006 à 17:08:35

                      Non, mais tu vas juste devoir faire des strcmp.

                      Ou alors créer en effet pleins de variables (ou un tableau ;) ) et faire un seul strcmp dans une boucle qui parcourt le tableau.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Switch et chaîne de caractère

                      × 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