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.