Menu avec un switch [Résolu]

Signaler
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005
-
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005
-
je ne comprend pas pkoi le programme une fois qu'il a lancé le premier choix du menu a la fin il ne reviens pas au menu, il s'arrete directement,
merci d'avance...

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>


#define MAX 100

void tri_bulle()
{
int nb,i,j,v,tab[MAX]; /* Déclarations */


srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");


for(i=0;i<nb;i++) /* Remplissage du tableau aléatoirement */
tab[i]=rand();


printf("Les valeurs avant le tri : "); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);



for (i=0; i<nb; i++) /* tri */
for (j=nb-1; j>i; j--)
if (tab[j-1]>tab[j])
{
v=tab[j-1];
tab[j-1]=tab[j];
tab[j]=v;
}


printf("\n\nLes valeurs apres le tri :"); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);


system("PAUSE");
}



/************************ programme principal ****************************/


int main()
{
/* déclarations */
int choix=0;


printf("\n\n\t\t\t ****************\n");
printf("\t\t\t *MENU PRINCIPAL*\n");
printf("\t\t\t ****************\n\n\n\n");
printf("\t TAPEZ :\n\n\n\n");
printf("\t\t1\t Pour :\t Lancer le prog de tri a bulle\n\n");
printf("\t\t2\t Pour :\t Lancer le prog de tri par insertion\n\n");
printf("\t\t3\t Pour :\t Lancer le prog de tri par ext\n\n");
printf("\t\t4\t Pour :\t Lancer le prog de tri shell\n\n");
printf("\t\t5\t Pour :\t Lancer le prog de tri fusion\n\n");
printf("\t\t6\t Pour :\t Lancer le prog de tri rapide\n\n");
printf("\t\t7\t Pour :\t Quitter le programme\n\n\n");
printf("\t CHOIX : ");
scanf("%d",&choix);


switch(choix)
{
case 1 : tri_bulle();
break;


case 7 : break;


}


}

8 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
le probleme vient de la:



switch(choix)
{
case 1 : tri_bulle();
break;



case 7 : break;


}

aie!! bon on reprend tout...
déja
ton switch ne prend en compte que les cas 1 et 7, que se passe t-il si
j'ai la mauvaise idée (moi ou mon petit frere de 6 mois qui sait meme
po ce qu'est un clavier) de taper 0, 5 ou 6876546?

donc:

switch(choix){
case 1 : tri_bulle(); break;


case 7 : break;


default: break; // si choix ne correspond a aucun choix possible, ciao...

}

ensuite:

case 7 : break; ne fait rien, on peut le virer, de toute facon si tu tapes 7 ca sera pris en charge par le case 'defaut'



bon. que se passe-t-il quand tu tapes 1 ? le prog passe au
switch, il trouve que le premier case va, il fait le tri, puis break;

break signifie que le prog va a la fin du switch, apres le }

qu'y a-t-il apres? le } qui signifie la fin de main()... et donc la fin du prog.

donc, ton prog ne plante pas du tout, ta fonction ded tri n'est pas en
cause, mais c'est toi qui n'as pas prévu un retour un peu plus haut.

reprenons:



void main(void){

int choix= 0;

bool continue=true;

while (continue==true){

printf ("tout ton menu");


scanf("%d",&choix);
switch(choix) {
case 1 : tri_bulle();break;


case 8:continue=false;

//tes autres case





default: printf("hé ducon lis les instructions ;) ");break; }


}

}



bon.. ca devrait aller comme ca.




____


Omnia vincit labor improbus
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

et oui il se termine. Essaye de mettre ton switch dans une bloucle infini et tu fais un return pour la quitter.

while(1)
{
//affichage du menu...
switch(choix)
{
case 7:
return 0; //bye bye
}
}
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
oups on a répondu + vite que moi
_______________________


Omnia vincit labor improbus
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
dis donc byeto ta méthode est pas tres propre.

le return 0 s'adresse a main(), et ferme le prog; que se passe t-il si
elle veut faire autre chose apres avoir tapé 7 (enregistrement
parametres par ex )?

mais bon, dans ce cas precis ca marche..
_______________________


Omnia vincit labor improbus
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

le break ne fonctionne pas, il boucle, comme s'il garder les valeurs saisie,

en ce qui concerne le menu, j'ai pas mis tout le programme pour que ca soit plus clair

merci
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Et bien tu deplace le menu dans une fonction autre que main par exemple... Ah au fait c'etait juste un exemple.
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
quel break?

_______________________


Omnia vincit labor improbus
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

c'est bon merci le pb est regle, merci pour votre aide mais j'ai encore un pb !!!!!!! lol, la chieuse, c'est le premier post