Une boucle dans un switch, comment faire ?

Fermé
adrihag - 25 oct. 2012 à 17:53
 adrihag - 25 oct. 2012 à 19:34
Bonjour,


Pour l'ecole j'ai un travail a rendre en C . il s'agit d'un pile ou face qui stocke les statistiques. On doit faire un menu pour :
1 jouer
2 reinitialiser les stats
3 voir les stat
4 arreter le prog

Voici mon code source :

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
int choixmenu;
int pile_face;
int valeur_ordi;
int partie_jouee = 0;
int compteur_def = 0;
int compteur_vict = 0;
float pourcentage_vict = 0;
char encore='o';


printf("===LE JEU DU PILE OU FACE===\n\n");
printf("1. Jouer\n");
printf("2. Reinitialiser les statistiques\n");
printf("3. Consulter les statistiques\n");
printf("4. Quitter le jeu\n");
printf("Quel est votre choix ?");
scanf("%d", &choixmenu);

printf ("\n");

switch (choixmenu)

{	
	

	case 1:
	
			{	
		partie_jouee++;
		printf ("\nEntrez 1 pour pile ou 2 pour face:");

		scanf ("%d%*c",&pile_face);

		srand( time( NULL ) );
		valeur_ordi=(rand() % 2)+1;

		printf ("La piece est tombee sur : %d \n",valeur_ordi);
	if (pile_face == valeur_ordi)
{
		printf ("Vous avez gagne\n");
		compteur_vict = compteur_vict +1;
}
	else 
{
    printf ("Vous avez perdu\n");
    compteur_def = compteur_def +1;

}
{
printf("Jouer encore ? o / n?");
scanf("%c%*c",&encore);
}
break;

		}



	case 2:

		{
partie_jouee = 0;
compteur_def = 0;
compteur_vict = 0;
pourcentage_vict = 0;

printf("===STATS REMISES A ZERO===\n\n");
printf("1. Jouer\n");
printf("2. Reinitialiser les statistiques\n");
printf("3. Consulter les statistiques\n");
printf("4. Quitter le jeu\n");
printf("Quel est votre choix ?");
scanf("%d", &choixmenu);

		}



	case 3:
		{
printf("Voici vos statistiques\n\n");
printf("Parties jouees: %d\n\n",partie_jouee);
printf("Parties gagnees: %d\n\n",compteur_vict);
printf("Parties perdues: %d\n\n",compteur_def);
pourcentage_vict=(((float)compteur_vict/(float)partie_jouee)*100);
printf("Taux de reussite : %f \n\n", pourcentage_vict);

printf("===LE JEU DU PILE OU FACE===\n\n");
printf("1. Jouer\n");
printf("2. Reinitialiser les statistiques\n");
printf("3. Consulter les statistiques\n");
printf("4. Quitter le jeu\n");
printf("Quel est votre choix ?");
scanf("%d", &choixmenu);
break;
		}


	case 4:

		{
printf ("Merci d'avoir joue avec moi !");
getchar();
getchar();

return 0;
}

}
}


Le problème c'est que j'aimerais faire une boucle pour demander au joueur s'il veut rejouer. Si oui, le "case 1" recommence, si non, le menu switch s'affiche. Je n'y arrive pas ! J'ai besoin d'aide :)

Merci d'avance à tous les CCM'iens !

Bonne soirée

Adrien

3 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 25/10/2012 à 19:25
Salut adrihag,

Je suppose que tu peux faire quelque chose comme cela :

    /* déclarer et initialiser les variables */ 
    choixmenu = 0; 

    while (choixmenu != 4) 
    { 
        switch (choixmenu) 
        { 
        case 1: 
            do 
            { 
                encore = 'n'; 
                /* faire 1 (jouer) */ 
                /* demander si encore */ 
            } while (encore == 'o'); 
            choixmenu = 0; 
            break; 
        case 2: 
            /* faire 2 */ 
            choixmenu = 0; 
            break; 
        case 3: 
            /* faire 3 */ 
            choixmenu = 0; 
            break; 
        case 4: 
            /* faire 4 (quitter) */ 
            return 0; 
            break; 
        default: 
            /* par défaut, afficher le menu et (re)demander choixmenu */ 
            break; 
        } 
    } 
    return 0;

Donc, tu mets cela dans un while, le menu général dans le défaut du switch, et tu mets dans le case 1 un do / while pour répéter le jeu tant que l'utilisateur n'est pas fatigué.


Dal
1
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
25 oct. 2012 à 18:21
donc si je comprend bien :
il faut que tu initialises au début une variable de type char avec
char oui = 'o' par exemple
puis tant que char=='o' -> j'exécute case1
sinon -> menu switch

ça donnerait un truc de ce genre :

char oui = 'o';
while (oui=='o')
{
case 1;
oui = (le scanner pour que l'utilisateur entre sa oui ou non réponse)
}
affichage du menu switch

dsl je connais pas bien le C, j'utilise java mais ça y ressemble
0
Merci beaucoup DAL !
Je vais essayer tout ca mais la apres trois heures a chercher j'ai des accolades et des printf qui me sortent un peu par tous les trous .. hum hum..
Je tiens tout le monde au courant si ca marche ! Merci de votre aide rapide et de qualité :) !

Adrien
0