Probleme de switch

Probleme de switch - C - Programmation

Marsh Posté le 18-01-2006 à 12:46:46    

Bonjour,

 


Mon problème est que je n'arrive pas à quitter le switch.Il ne fait que rebouclé sur la chose et ne quitte jamais le programme

 


fichier main.c

 
Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "menu.h"
  4. #include "liste.h"
  5. #include "arbre.h"
  6. #define FICHIER "code.txt"
  7. Liste l;
  8. Arbre a;
  9. main()
  10. {
  11.     char carsortie;
  12.     printf("\n" );
  13. printf("\n" );
  14. printf("\n" );
  15. printf("Projet effectue par CZ et MD" );
  16. sleep(1000);
  17.     printf("\n" );
  18. printf("\n" );
  19. printf("\n" );
  20. printf("\n" );
  21. printf("Initialisation de la liste...\n" );
  22. l = InitListe(FICHIER);
  23. sleep(1000);
  24. printf("Initialisation de l'arbre..." );
  25. //Arbre a;
  26.     creerArbre(&a);
  27.     InitArbre(a,l);
  28. sleep(1000);
  29. printf("\n" );
  30. printf("\n" );
  31. printf("\n" );
  32. printf("\n" );
  33.     printf("\n" );
  34. printf("Veuillez appuyer sur la touche  'Entrer' pour continuer" );
  35. scanf("%c", &carsortie);
  36. MenuPrincipal(l,a);
  37. return 0;
  38. }
 

fichier menu.c contenant les autres menus

Code :
  1. #include "menu.h"
  2. int choix(char* invite)
  3. {
  4. int i;
  5. printf("%s", invite);
  6. scanf("%d", &i);
  7. return i;
  8. }
  9. /****************Menu Principal*****************/
  10. void MenuPrincipal()
  11. {
  12. int i;
  13. printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  14. printf(" Projet Morse\n" );
  15. printf("\n" );
  16. printf("  1- Liste\n" );
  17. printf("  2- Arbre\n" );
  18. printf("  3- Traduire un fichier\n" );
  19. printf("\n" );
  20. printf("  9- Quitter\n" );
  21. do
  22. {
  23.  i = choix("\n\nVeuillez saisir un chiffre dans le menu (9 pour quitter):  " );
  24.  switch(i)
  25.  {
  26.  case 1:
  27.  MenuListe();break;
  28.  case 2:
  29.  MenuArbre(); break;
  30.  case 3:
  31.   MenuTraduire();break;
  32.  case 5:
  33.  case 6:
  34.  case 7:
  35.  case 8:
  36.  printf("Erreur !!!Choisir un chiffre entre 1 et 3.\n" );break;
  37.  default:
  38.  sleep(1000);
  39.  printf("\n\n  AU REVOIR" );
  40.  sleep(1000);
  41.  }
  42.  } while(i != 9);
  43. }
  44. /****************Fin Menu Principal*****************/
  45. /**************Menu Liste***************/
  46. void MenuListe()
  47. {
  48.     int i;
  49.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  50. printf(" Menu Liste\n" );
  51. printf("\n" );
  52. printf("  1- Afficher\n" );
  53. printf("  2- Ajouter\n" );
  54. printf("  3- Rechercher\n" );
  55. printf("  4- Supprimer\n" );
  56. printf("\n" );
  57. printf("  9- Retour\n" );
  58. do
  59. {
  60.  i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  61.      switch(i)
  62.  {
  63.  case 1:
  64.  AfficheLi(&l);
  65.  break;
  66.  case 2:
  67.   AjouteLi(&l);
  68.  break;
  69.  case 3:
  70.  MenuListeRecherche();break;
  71.  case 4:
  72.   MenuListeSupprime();
  73.   break;
  74.  case 5:
  75.  case 6:
  76.  case 7:
  77.  case 8:
  78.  printf("Erreur !!!Choisir un chiffre entre 1 et 4.\n" );
  79.  case 9:
  80.  MenuPrincipal();
  81.  }
  82.  } while(i != 9);
  83. }
  84. /**************FIN Menu Liste***************/
  85. /**************Menu ListeRecherche***************/
  86. void MenuListeRecherche()
  87. {
  88.     int i;
  89.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  90. printf(" Rechercher un element dans la liste\n" );
  91. printf("\n" );
  92. printf("  1- Rechercher une lettre\n" );
  93. printf("  2- Rechercher un code morse\n" );
  94. printf("\n" );
  95. printf("  9- Retour\n" );
  96. do
  97. {
  98.  i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  99.      switch(i)
  100.  {
  101.  case 1:
  102.  RechercheLettreLi(&l);
  103.  break;
  104.  case 2:
  105.  RechercheCodeLi(&l);
  106.  break;
  107.   case 3:
  108.  case 4:
  109.  case 5:
  110.  case 6:
  111.  case 7:
  112.  case 8:
  113.  printf("Erreur !!!Choisir un chiffre entre 1 ou 2.\n" );
  114.  case 9:
  115.  MenuListe();
  116.  }
  117.  } while(i != 9);
  118. }
  119. /***********Fin MenuListeRecherche******************/
  120. /**************Menu Liste***************/
  121. void MenuListeSupprime()
  122. {
  123.     int i;
  124.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  125. printf(" Supprimer un element dans la liste\n" );
  126. printf("\n" );
  127. printf("  1- A l'aide d'une lettre\n" );
  128. printf("  2- A l'aide d'un code morse\n" );
  129. printf("\n" );
  130. printf("  9- Retour\n" );
  131. do
  132. {
  133.  i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  134.      switch(i)
  135.  {
  136.  case 1:
  137.  SupprimeLettreLi(&l);
  138.  break;
  139.  case 2:
  140.  SupprimeCodeLi(&l);
  141.  break;
  142.   case 3:
  143.  case 4:
  144.  case 5:
  145.  case 6:
  146.  case 7:
  147.  case 8:
  148.  printf("Erreur !!!Choisir un chiffre entre 1 ou 2.\n" );
  149.  case 9:
  150.  MenuListe();
  151.  }
  152.  } while(i != 9);
  153. }
  154. /************Fin MenuListeSupprime***************/
  155. /**************Menu Arbre***************/
  156. void MenuArbre()
  157. {
  158.     int i;
  159.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  160. printf(" Menu Arbre\n" );
  161. printf("\n" );
  162. printf("  1- Afficher\n" );
  163. printf("  2- Ajouter\n" );
  164. printf("  3- Rechercher\n" );
  165. printf("  4- Supprimer\n" );
  166. printf("\n" );
  167. printf("  9- Retour\n" );
  168. do
  169. {
  170.  i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  171.      switch(i)
  172.  {
  173.  case 1:
  174.  AfficheAr(&a);
  175.  break;
  176.  case 2:
  177.  AjouterAr(&a);
  178.  break;
  179.  case 3:
  180.  RechercheLettreAr(&a);
  181.  break;
  182.  case 4:
  183.  SupprimeAr(&a);
  184.  break;
  185.  case 5:
  186.  case 6:
  187.  case 7:
  188.  case 8:
  189.  printf("Erreur !!!Choisir un chiffre entre 1 et 4.\n" );
  190.  case 9:
  191.  MenuPrincipal();
  192.  }
  193.  } while(i != 9);
  194. }
  195. /**************FIN Menu Arbre***************/
  196. /**************Menu Traduire***************/
  197. void MenuTraduire()
  198. {
  199.     int i;
  200.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  201. printf(" Menu Traduire Fichier\n" );
  202. printf("\n" );
  203. printf("  1- De texte a morse\n" );
  204. printf("  2- De morse a texte\n" );
  205. printf("\n" );
  206. printf("  9- Retour\n" );
  207. do
  208. {
  209.  i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  210.      switch(i)
  211.  {
  212.  case 1:
  213.  TraduireFichierTxt(&l);
  214.  break;
  215.  case 2:
  216.  TraduireFichierMorse(&a);
  217.  break;
  218.  case 3:
  219.  case 4:
  220.  case 5:
  221.  case 6:
  222.  case 7:
  223.  case 8:
  224.  printf("Erreur !!!Choisir un chiffre entre 1 ou 2.\n" );
  225.  case 9:
  226.  MenuPrincipal();
  227.  }
  228.  } while(i != 9);
  229. }
  230. /**************FIN Menu Traduire***************/

Message cité 1 fois
Message édité par Marc le 09-04-2014 à 10:54:49
Reply

Marsh Posté le 18-01-2006 à 12:46:46   

Reply

Marsh Posté le 18-01-2006 à 12:58:01    

Code :
  1. do
  2. {
  3.    i = choix("\n\nVeuillez saisir un chiffre dans le menu:  " );
  4.    /* -edit-  
  5.     affiche le choix de l'utilisateur - pour contrôle */
  6.    printf("Vous avez saisi : %d\n", i);
  7.    /* traite l'option choisie */
  8.    switch(i)
  9.    {
  10.      case 1:
  11.      TraduireFichierTxt(&l);
  12.      break;
  13.      case 2:
  14.      TraduireFichierMorse(&a);
  15.      break;
  16.      case 9:
  17.      MenuPrincipal();
  18.      break;
  19.      default: /* option non disponible */
  20.      printf("Erreur !!!Choisir un chiffre entre 1 ou 2.\n" );
  21.      }
  22. } while(i != 9);


 
La plupart de tes switch sont incorrects, il manque des break et tu n'utilises pas l'instruction default à bon essient.
S'inspirer de l'exemple ci-dessus qui reprend le dernier switch de ton code.


Message édité par slash33 le 18-01-2006 à 13:04:59
Reply

Marsh Posté le 18-01-2006 à 13:10:34    

ca ne fonctionne pas

Reply

Marsh Posté le 18-01-2006 à 13:11:15    

Tu n'as pas quelque chose de plus clair ??? "Ca ne fonctionne pas" pff
 
Ca ne marche parce que:
- le compilateur signale les erreurs suivantes : <j'énumère les erreurs affichées par le compilateur>
- l'éditeur de liens signale les erreurs suivantes : <j'énumère les erreurs affichées par l'éditeur de liens>
- la compilation et l'édition de liens réussissent mais le comportement à l'exécution n'est pas celui attendu : <je décris le comportement anormal>


Message édité par slash33 le 18-01-2006 à 13:28:16
Reply

Marsh Posté le 18-01-2006 à 13:18:00    

Je t'explique,  
ce que je veux c'est pouvoir quitter l'application. Donc j'utilise les menus ,je m'y promene et quand je veux quitter l'application je dois  appuyer sur 9 pour reomterd'un niveau
 
Le probleme c'est que une fois que j'arrive à la racine, il boucle et me réaffiche le menu principale des fois meme il va sur le menu liste
 
Pk? je n'en sait rien

Reply

Marsh Posté le 18-01-2006 à 13:23:41    

Comme je l'ai indiqué avant : inspires toi du traitement switch que je t'ai fourni.
 
=>
 

Code :
  1. /* quelque part dans MENU PRINCIPAL */
  2. do
  3. {
  4.    i = choix("\n\nVeuillez saisir un chiffre dans le menu (9 pour quitter):  " );
  5. /* -edit-
  6.    affiche le choix de l'utilisateur - pour contrôle */
  7.    printf("Vous avez saisi : %d\n", i);
  8.    switch(i)
  9.    {
  10.       case 1:
  11.           MenuListe(); break;
  12.       case 2:
  13.           MenuArbre(); break;
  14.       case 3:
  15.           MenuTraduire(); break;
  16.       case 9:
  17.         sleep(1000);
  18.         printf("\n\n  AU REVOIR" );
  19.         sleep(1000);
  20.         break;
  21.       default:
  22.         printf("Erreur !!!Choisir un chiffre entre 1 et 3.\n" );break;
  23.    }
  24. } while(i != 9);


Message édité par slash33 le 18-01-2006 à 13:25:57
Reply

Marsh Posté le 18-01-2006 à 14:19:19    

Juste une indication, dans les sous-menu tu devrais eviter de rappeller le menu qui t'y a conduit, la stack va se remplire et ce n'est surement pas utile. Dans ton code tu fais :
 
MenuPrincipal  --> MenuRecherche, si on tape 9 -> Menupricipal ..etc ..  
 
ca devrait plutot etre :
 
MenuPrincipal -> menuRecherche, la  si on tape 9, retour au menu et pas "rappeller" le menu. Il suffit dans les "case 9: " de faire un break, ca devrait suffire..
 

Reply

Marsh Posté le 18-01-2006 à 14:22:54    

J'ai oublie, c'est peut etre ca le fait que tu as l'impression de ne pas sortir du menu ..  
Quand du menuPrincipal tu appelle MenuRecherche qui AppelMenuPrincipal qui appelle autre chose .. Le fait est que dans le second appel de menu principal, tu ne vas quitter mais retourner au MenuRecherche ou tu vas faire '9' qui va a nouveau rappeller le MenuPrincipal etc ...
 
Bref un super piege sans sortie
 
 

Reply

Marsh Posté le 18-01-2006 à 16:00:22    

rabzouze a écrit :

Mon problème est que je n'arrive pas à quitter le switch.Il ne fait que rebouclé sur la chose et ne quitte jamais le programme


Je pense qu'avant de d'écrire 300 lignes de codes, il faut écrire un algo qui tourne sur le papier. Ensuite tu codes l'algo pour le vérifier et enfin tu ajoutes l'application...
 
Faire des menus, c'est pas compliqué et c'est archi usé...


FAIRE
  afficher le mnu
  attendre le choix
  SELON le choix
  CAS 1
     action 1
  CAS 2
     action 1
  CAS 9
     fin
  FIN SELON
TANQUE ce n'est pas la fin


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed