Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3050 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme de switch

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de switch

n°1286490
rabzouze
Posté le 18-01-2006 à 12:46:46  profilanswer
 

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
mood
Publicité
Posté le 18-01-2006 à 12:46:46  profilanswer
 

n°1286501
slash33
Posté le 18-01-2006 à 12:58:01  profilanswer
 

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
n°1286510
rabzouze
Posté le 18-01-2006 à 13:10:34  profilanswer
 

ca ne fonctionne pas

n°1286511
slash33
Posté le 18-01-2006 à 13:11:15  profilanswer
 

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
n°1286512
rabzouze
Posté le 18-01-2006 à 13:18:00  profilanswer
 

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

n°1286514
slash33
Posté le 18-01-2006 à 13:23:41  profilanswer
 

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
n°1286590
francky06l
Posté le 18-01-2006 à 14:19:19  profilanswer
 

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..
 

n°1286594
francky06l
Posté le 18-01-2006 à 14:22:54  profilanswer
 

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
 
 

n°1286706
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-01-2006 à 16:00:22  profilanswer
 

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/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme de switch

 

Sujets relatifs
Problème pour un quizproblème pour un quiz
Probleme de syntaxe avec Switch caseProblème Switch Get Page & EasyPHP
Problème avec switch - case.Probleme de switch et variable contenant du texte
Probleme bête avec switch case...[résolu]problème avec un switch et les chaines de caractère !!
Kézako? Problème avec switch[Java] problème avec le switch
Plus de sujets relatifs à : Probleme de switch


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR