[Boucle Infinie] pour un menu
Bonjour,
j'ai voulu faire un petit menu me permettant de configurer certaines valeurs d'une classe, jusque là rien de compliqué mais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <iostream>
using namespace std;
// à l'origine c une methode de classe
// mais comme ça, ça plante également
void menu()
{
int v1 = 0; // remplacé par une variable de classe
int v2 = 0; // de meme
char choix = '0';
do {
cout << "Choix ? " << endl;
cin >> choix;
} while (choix != '1'&& choix != '2');
switch (choix)
{
case '1':
cout << "Entrer variable v1 " << endl;
cin >> v1;
menu(); // je veux relancer menu pour réafficher mes variables
// afin de pouvoir en configurer plusieurs et lancer un
// traitement apres ( qui depend de ces variables )
// ca permet de visualiser la configuration
// et donc de remodifier avant de lancer le traitement
break;
case '2':
cout << "Entrer variable v2 " << endl;
cin >> v2;
menu();
break;
default:
menu();
break;
}
}
int main()
{
menu();
system("PAUSE");
} |
Ce code boucle lorsque je rentre un caractere à la place d'un chiffre lors du cin sur une variable, et ceci aussi bien avec un 'a' qu'un '-' .
Citation:
Choix ?
2
Entrer la variable v2 :
a
Choix ?
Choix ?
Choix ?
Choix ?
Choix ?
Choix ?
Choix ?
etc ...
quelqu'un peut il m'expliquer ce phénomène, et comment y remedier !
car pour moi en relançant menu();
mon choix est remis à 0, donc je dois forcement rentrer dans le do while et le cin devrait arreter la boucle car il attend que l'on tape quelquechose.
Merci d'avance.
Re: [Boucle Infinie] pour un menu
Citation:
Envoyé par NhyMbuS
Citation:
Choix ?
2
Entrer la variable v2 :
a
Choix ?
Choix ?
etc ...
je ne vois pas ce qu'il y a de bizarre, ton 'a' est le nom de la variable, une fois qu'il est lu tu rappelles menu (soit dit en passant, j'espère que ton compilateur voit qu'il s'agit d'une recursion terminale et transforme ton appel fonctionnel en un simple jump) ... et il n'y a aucun moyen d'en sortir car quoi qu'il arrive tu rappelle menu !
a part cela : - la mise à '0' de choix ne sert strictement a rien, elle est donc génante et doit être retiree
- les inits de v1 et v2 ne servent à rien ici mais apparemment tu vas changer ces variables
- le cas default du switch ne sert à rien car tu ne sorts de la boucle do while que si choix est '1' ou '2'