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 :

instruction switch


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut instruction switch
    Bonjour,

    j'ai un problème avec la fonction switch. je vous donne le code (il s'agit d'un traducteur anglais-français):

    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 <stdio.h>
    #include <string.h>
     
    void ajouter(void) { .... }
     
    void rechercher(void) {....}
     
    int main(void) {
     
        char choix[3];   
        int erreur=1,logi=1,k,i;
     
         printf("traducteur anglais-français 1.0\n\n");   
         printf("1. ajouter un mot & sa traduction\n");
         printf("2. rechercher une traduction\n");
         printf("3. effacer un mot & sa traduction\n");
         printf("4. remplacer une traduction\n");
         printf("5. quitter\n\n");
     
         while (logi==1) {
     
              while (erreur==1) { 
                    /* partie qui prend le choix */
                    printf("\tvotre choix : ");
                    if (fgets (choix, sizeof choix, stdin) != NULL) {
                       char *p = strchr (choix, '\n');
                       if (p){*p = 0;}}
                    i=strtol(choix,NULL,0); 
                    if (i>0 && i<6) erreur=0;          
               }
     
               /* partie qui traite le choix*/
                   switch (i){
                       case 1:{ajouter();printf("passe, et i vaut à ce moment : %d\n",i);}    
                       case 2:{ printf("\n i vaut alors : %d\n",i);rechercher();}
                       case 3:logi=0;             
                       } /* retour du switch */
     
             }  /* retour du logi*/    
    return 0;    
    }

    le problème, c'est que lorsque je reviens de la fonction ajouter(), malgré un i=1, il lance la fonction rechercher(), et que quand je reviens de la fonction rechercher() , malgré un i=2, il fait logi=0, et quitte le programme.

    je ne comprends pas. dois-je mettre un break ? sinon je remplace le switch par une série de if(i==) {}, mais j'aimerais comprendre le problème.
    est-ce qu'il ne teste plus le i dans la boucle switch au retour d'une fonction ?

    merci beaucoup.

  2. #2
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    A priori Oui il faut un break
    Car Si ajouter() modifie le contenue de "i" alors les suivants peuvent aussi etre executés

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    salut,
    mais je teste i au retour de la fonction, et il n'a pas changé !

    d'autre part je n'utilise pas de variables globales (trop de soucis).

    donc i n'a pas changé. est-ce que le break est obligatoire quand même ?

  4. #4
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Syntaxe (Exemple)
    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
             switch (Option)
                   {
                   case 'f' :
                        strcpy(fichier,optarg);
                        break;
     
                   case 'c' :
                        Le_Car=optarg[0];
                        break;
     
                   case 'n' :
                        Le_Car=0;
                        break;
     
                   case 'h':
                   default :
                        printf(USAGE);
                        exit(1);
                        break;
                   }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    d'accord, donc break obligatoire. merci d'avoir répondu si vite.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Points : 46
    Points
    46
    Par défaut
    argg, j'avais parlé trop tôt, maintenant que j'avais mis break, la fonction appelée tournait en boucle.

    le retour de fonction dans la boucle switch se faisait bien (j'ai testé), mais la fonction était rappelée.

    j'ai trouvé la solution:

    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
     
    int main(void) {
        int logi=1;
     
         while (logi==1) { 
     
         int erreur=1,k,i;
     
             printf("\n\n traducteur anglais-français 1.0\n\n");   
             printf("1. ajouter un mot & sa traduction\n");
             printf("2. rechercher une traduction\n");
             printf("3. effacer un mot & sa traduction\n");
             printf("4. remplacer une traduction\n");
             printf("5. quitter\n\n");
     
                  while (erreur==1) {
                        char choix[3];   
                        /* partie qui prend le choix */
                        printf("\tvotre choix : ");
                        if (fgets (choix, sizeof choix, stdin) != NULL) {
                           char *p = strchr (choix, '\n');
                           if (p){*p = 0;}}
                        i=strtol(choix,NULL,0); 
                        if (i>0 && i<6) erreur=0;          
                   }
     
                   /* partie qui traite le choix*/
                       switch (i){
                           case 1:ajouter();i=0;break;    
                           case 2:rechercher();i=0;break;
                           case 5:logi=0;             
                           } /* retour du switch */
     
                 }  /* retour du logi*/    
    return 0;    
    }
    affaire résolue. merci argoet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2008, 13h59
  2. instruction switch
    Par calitom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2007, 15h50
  3. Petit doute sur l'instruction "switch"
    Par SybVicious dans le forum Débuter
    Réponses: 6
    Dernier message: 28/08/2007, 10h57
  4. Probleme instruction switch
    Par mpascolo dans le forum Langage
    Réponses: 7
    Dernier message: 17/10/2006, 11h14
  5. [Info] Instruction switch
    Par HNT dans le forum Langage
    Réponses: 6
    Dernier message: 23/09/2005, 16h47

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