"Goto"
Chaky
-
Chaky -
Chaky -
Bonjour,
je suis en train de programmer en C et j'en arrive à un endroit où mon programme doit faire en sorte, suivant les choix que j'ai mis à dispositions, de faire un retour au menu principal en appuyant sur la touche 1 par exemple.
Comment y remédier ? Est-ce que je peux y arriver avec GOTO, sachant que je débute...?
MERCI
je suis en train de programmer en C et j'en arrive à un endroit où mon programme doit faire en sorte, suivant les choix que j'ai mis à dispositions, de faire un retour au menu principal en appuyant sur la touche 1 par exemple.
Comment y remédier ? Est-ce que je peux y arriver avec GOTO, sachant que je débute...?
MERCI
8 réponses
Oui tu peux y arriver avec le goto, mais tu ne le feras pas ;-))). Il vaut mieux éviter l'utilisation de goto sauf cas particulier. Mais ici tu n'en as nullement besoin.
Avec une bête boucle while tu devrais t'en sortir facilement.
Par exemple :
Avec une bête boucle while tu devrais t'en sortir facilement.
Par exemple :
int main(void) {
int test=1;
while(test) {
char c;
int a;
...
printf("taper 1 pour recommencer", 0 pour quitter : ");
fflush(stdout);
c=getchar();
while((a=getchar()!='\n' && a!=EOF);
switch(c) {
case '1' :
test=1;
break;
case '0' :
test=0;
break;
default :
/*choix inconnu. A toi de gérer ce cas*/
}
}
return 0;
}
Oui mais moi il y a 3 possibilités :s Sinon j'aurais fais un booléen mais du coup je chercher une autre solution...
Si tu veux je colle tout le programme, il n'est pas très long mais bon....
Les 3 possibilités sont:
1. Retour au menu principal
2. Retour au choix du niveau de difficulté
3. Quitter
Les 3 possibilités sont:
1. Retour au menu principal
2. Retour au choix du niveau de difficulté
3. Quitter
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui poste ton code, ça sera mieux car ça dépend de pas mal de choses.
Mais l'idée consiste dans le switch() à distinguer toutes les possibilités et appeler les bonnes fonctions en fonction du choix de l'utilisateur.
Cdlt,
Mais l'idée consiste dans le switch() à distinguer toutes les possibilités et appeler les bonnes fonctions en fonction du choix de l'utilisateur.
Cdlt,
J'ai mis en GRAS les fautes, je l'ai aient volontairement faites pour que tu comprennes ce que je veux faire car sinon je vais avoir du mal à t'expliquer.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long nb_mystere; //nb a trouver
long nb_entre; // nb entre par l'utilisateur
long max = 0; //valeur MAX nb aléatoire
long min = 0; //valeur MIN nb aléatoire
long compteur; //compteur de coups
long choix_menu; // choix du mode
long niveau; //choix du niveau
int nvlle_partie; //booleen => redémarrage du progr
int retour_menu;
int nb2_entre;
do
{
printf ("=====================================================================\n");
printf (" *****__Plus ou Moins__***** \n");
printf ("=====================================================================\n\n\n");
printf ("==== Menu ====\n\n");
printf ("1.==> 1 joueur");
printf ("2.==> 2 joueurs");
scanf ("%ld", &choix_menu);
printf ("\n\n");
compteur = 0;
switch (choix_menu)
{
case 1: // mode 1 joueur
printf ("=== Mode 1 joueur ===\n\n");
printf ("Niveau de difficulté\n\n");
printf (" 1.=> Facile (Entre 1 et 10");
printf (" 2.=> Moyen (Entre 1 et 100");
printf (" 3.=> Difficile (Entre 1 et 10 000");
printf (" 4.=> Personnaliser (Définissez vous meme la valeur maximale !\n\n");
scanf ("%ld", &niveau);
printf ("\n\n");
switch (niveau)
{
case 1:
printf ("\tMode 1 Joueur __ Facile\n\n");
max = 10;
break;
case 2:
printf ("\tMode 1 Joueur __ Moyen\n\n");
max = 100;
break;
case 3:
printf ("\tMode 1 Joueur __ Difficile\n\n");
max = 100;
break;
case 4:
printf ("\tMode 1 Joueur __ Personnaliser\n\n");
max = 0;
printf ("Entrez une valeur maximale :\n");
scanf ("%ld", &max);
break;
}
srand(time(NULL));
nb_mystere = (rand() % (max - min + 1)) + min;
do // 1 player
{
printf("Quel est le nombre mystere ?\n");
scanf ("%ld", &nb_entre);
compteur++;
if (nb_entre > nb_mystere)
printf ("C'est moins\n");
else if (nb_entre < nb_entre)
printf ("C'est plus\n");
else
printf ("Bien joué ;-) Vous avez trouvez le nombre mystere en %ld coups !\n\n", compteur);
}while (nb_mystere != nb_entre);
printf("\n\n");
printf ("1.=> Retour Menu principal");
printf ("2.=> Recommencer niveau");
printf ("3.=> Quitter\n");
do
{
if (nb2_entre == 1)
goto (choix_menu);
else if (nb2_entre == 2)
goto (niveau);
else if (nb2_entre == 3)
goto exit;
}while (nb2_entre != 1 && 2 && 3);
case 2: // 2 players
printf ("=== Mode 2 joueurs ===\n\n");
printf ("Joueur 1, entrez le nombre mystere");
scanf ("%ld", &nb_mystere);
printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf ("Joueur 2, trouvez le nombre mystere !\n");
do
{
printf ("Joueur 2...quel est le nombre mystere ?\n");
scanf ("%ld", &nb_entre);
compteur++;
if (nb_entre < nb_mystere)
printf ("C'est plus !\n");
else if (nb_entre > nb_mystere)
printf ("C'est moins !\n");
else ("Bravo ! Vous avez trouve le nombre mystere\n\n");
}while (nb_entre != nb_mystere);
printf("\n\n");
printf ("1.=> Retour Menu principal");
printf ("2.=> Recommencer niveau");
printf ("3.=> Quitter\n");
do
{
if (nb2_entre == 1)
goto (choix_menu);
else if (nb2_entre == 2)
goto (niveau);
else if (nb2_entre == 3)
goto exit;
}while (nb2_entre != 1 && 2 && 3);
return 0;
}
Voilà.
Tu remarqueras les pb avec mes 3 variables en question.
Merci
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long nb_mystere; //nb a trouver
long nb_entre; // nb entre par l'utilisateur
long max = 0; //valeur MAX nb aléatoire
long min = 0; //valeur MIN nb aléatoire
long compteur; //compteur de coups
long choix_menu; // choix du mode
long niveau; //choix du niveau
int nvlle_partie; //booleen => redémarrage du progr
int retour_menu;
int nb2_entre;
do
{
printf ("=====================================================================\n");
printf (" *****__Plus ou Moins__***** \n");
printf ("=====================================================================\n\n\n");
printf ("==== Menu ====\n\n");
printf ("1.==> 1 joueur");
printf ("2.==> 2 joueurs");
scanf ("%ld", &choix_menu);
printf ("\n\n");
compteur = 0;
switch (choix_menu)
{
case 1: // mode 1 joueur
printf ("=== Mode 1 joueur ===\n\n");
printf ("Niveau de difficulté\n\n");
printf (" 1.=> Facile (Entre 1 et 10");
printf (" 2.=> Moyen (Entre 1 et 100");
printf (" 3.=> Difficile (Entre 1 et 10 000");
printf (" 4.=> Personnaliser (Définissez vous meme la valeur maximale !\n\n");
scanf ("%ld", &niveau);
printf ("\n\n");
switch (niveau)
{
case 1:
printf ("\tMode 1 Joueur __ Facile\n\n");
max = 10;
break;
case 2:
printf ("\tMode 1 Joueur __ Moyen\n\n");
max = 100;
break;
case 3:
printf ("\tMode 1 Joueur __ Difficile\n\n");
max = 100;
break;
case 4:
printf ("\tMode 1 Joueur __ Personnaliser\n\n");
max = 0;
printf ("Entrez une valeur maximale :\n");
scanf ("%ld", &max);
break;
}
srand(time(NULL));
nb_mystere = (rand() % (max - min + 1)) + min;
do // 1 player
{
printf("Quel est le nombre mystere ?\n");
scanf ("%ld", &nb_entre);
compteur++;
if (nb_entre > nb_mystere)
printf ("C'est moins\n");
else if (nb_entre < nb_entre)
printf ("C'est plus\n");
else
printf ("Bien joué ;-) Vous avez trouvez le nombre mystere en %ld coups !\n\n", compteur);
}while (nb_mystere != nb_entre);
printf("\n\n");
printf ("1.=> Retour Menu principal");
printf ("2.=> Recommencer niveau");
printf ("3.=> Quitter\n");
do
{
if (nb2_entre == 1)
goto (choix_menu);
else if (nb2_entre == 2)
goto (niveau);
else if (nb2_entre == 3)
goto exit;
}while (nb2_entre != 1 && 2 && 3);
case 2: // 2 players
printf ("=== Mode 2 joueurs ===\n\n");
printf ("Joueur 1, entrez le nombre mystere");
scanf ("%ld", &nb_mystere);
printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf ("Joueur 2, trouvez le nombre mystere !\n");
do
{
printf ("Joueur 2...quel est le nombre mystere ?\n");
scanf ("%ld", &nb_entre);
compteur++;
if (nb_entre < nb_mystere)
printf ("C'est plus !\n");
else if (nb_entre > nb_mystere)
printf ("C'est moins !\n");
else ("Bravo ! Vous avez trouve le nombre mystere\n\n");
}while (nb_entre != nb_mystere);
printf("\n\n");
printf ("1.=> Retour Menu principal");
printf ("2.=> Recommencer niveau");
printf ("3.=> Quitter\n");
do
{
if (nb2_entre == 1)
goto (choix_menu);
else if (nb2_entre == 2)
goto (niveau);
else if (nb2_entre == 3)
goto exit;
}while (nb2_entre != 1 && 2 && 3);
return 0;
}
Voilà.
Tu remarqueras les pb avec mes 3 variables en question.
Merci
Ton code n'est pas très bien conçu. Il ne faut pas tout mettre dans le main, mais séparer ton code en plusieurs fonctions. Par exemple, tu pourrais te créer une fonction changeNiveau() qui permettrait de changer min et max, une fonction menuPrincipal() qui te permettrait de changer choix_menu.
Tu peux aussi te faire une fonction qui traite le déroulement du jeu.
Cela te simplifiera grandement le code, mais vraiment.
Ensuite, srand(time(NULL)) serait mieux avant le premier do. Il vaut mieux ne l'appeler qu'une fois pour ne pas fausser l'équiprobabilité.
Et enfin pour répondre à ta question, il te suffit te mettre un switch(nb2_entre) à la place de tes if à la fin du programme. Et au lieu de goto, t'appelleras tes nouvelles fonctions créées.
while (nb2_entre != 1 && 2 && 3);
Ce n'est pas mis en gras, donc je signale l'erreur.
Il faut répéter nb2_entre autant de fois qu'il y a de conditions. Par exemple while(nb2_entre!=1 && nb2_entre!=2 && nb2_entre!=3);
Cdlt,
Tu peux aussi te faire une fonction qui traite le déroulement du jeu.
Cela te simplifiera grandement le code, mais vraiment.
Ensuite, srand(time(NULL)) serait mieux avant le premier do. Il vaut mieux ne l'appeler qu'une fois pour ne pas fausser l'équiprobabilité.
Et enfin pour répondre à ta question, il te suffit te mettre un switch(nb2_entre) à la place de tes if à la fin du programme. Et au lieu de goto, t'appelleras tes nouvelles fonctions créées.
while (nb2_entre != 1 && 2 && 3);
Ce n'est pas mis en gras, donc je signale l'erreur.
Il faut répéter nb2_entre autant de fois qu'il y a de conditions. Par exemple while(nb2_entre!=1 && nb2_entre!=2 && nb2_entre!=3);
Cdlt,