Difficulté en C++
Ophelie
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je programme actuellement une aplication en C++ sous visual studio 2008 xpress et je suis bloquée car a un mment dans mon code je souhaiterais faire quelquechose comme ceci:
int reponse;
cin>>reponse
switch(reponse)
{
int const t[1000];
case 0:{goto menuprincipal;}break;
for (int k=1; k<1000; k++)
{
case k:{cout<<"Merci de votre aide"<<endl;}break;
}
default:cout<<"Erreur de saisie tapez un des chiffres attendus "<<endl;break;
}
le probleme est que le compilateur me renvoie l'erreur:
error C2051: l'expression associée à case n'est pas une constante
Alors je voudrai savoir si il existe un moyen de palier ce problème
Merci d'avance!
Je programme actuellement une aplication en C++ sous visual studio 2008 xpress et je suis bloquée car a un mment dans mon code je souhaiterais faire quelquechose comme ceci:
int reponse;
cin>>reponse
switch(reponse)
{
int const t[1000];
case 0:{goto menuprincipal;}break;
for (int k=1; k<1000; k++)
{
case k:{cout<<"Merci de votre aide"<<endl;}break;
}
default:cout<<"Erreur de saisie tapez un des chiffres attendus "<<endl;break;
}
le probleme est que le compilateur me renvoie l'erreur:
error C2051: l'expression associée à case n'est pas une constante
Alors je voudrai savoir si il existe un moyen de palier ce problème
Merci d'avance!
5 réponses
Bonjour,
Il y a une erreur dans ton switch, le for() qui refait le case k;
Alors voilà, déclare ta variable 't' hors du switch.
Puis, tu veux que lorsque 'reponse' vaut un nombre entre 1 et 999, je te conseille de le faire avec des if / else if.
Ce n'est peut-être pas la cause du problème, mais je psnes bien que ce soit cela.
Ainsi :
Je ne connais pas la fonction 'goto', ainsi je ne peut pas de dire qq chose là-dessus.
Voila, bye ;)
Il y a une erreur dans ton switch, le for() qui refait le case k;
Alors voilà, déclare ta variable 't' hors du switch.
Puis, tu veux que lorsque 'reponse' vaut un nombre entre 1 et 999, je te conseille de le faire avec des if / else if.
Ce n'est peut-être pas la cause du problème, mais je psnes bien que ce soit cela.
Ainsi :
int reponse; int const t [1000]; cin >> reponse; if(reponse==0){ goto menuprincipal; } else if(reponse>0&&reponse<1000){ cout << "Merci de votre aide." << endl; } else{ cout << "Erreur de saisie, tapez un des chiffres attendus." << endl; }
Je ne connais pas la fonction 'goto', ainsi je ne peut pas de dire qq chose là-dessus.
Voila, bye ;)
Le message d'erreur informe juste que les valeurs des case d'un switch doivent être des variables constantes, donc connues à la compilation.
Le goto est une instruction plus que déconseillé d'utiliser.
Le goto est une instruction plus que déconseillé d'utiliser.
Le problème avec le if eslif c'estque je devrais en faire 1000 car chacun de mes "cout" a une phrase différente derriere j'ai posté un probleme simplifié du probleme réel pour ne pas embrouiller les gens voici le probleme réel:
cin>>reponse2;
switch(reponse2)
{
case 0:{goto menuprincipal;}break;
for (int k=1; k<1000; k++)
{
case k:{tab[k]->affichersocle();}break;
}
default:cout<<" Erreur de saisie tapez un des chiffres attendus "<<endl;break;
}
remarque tab est un tableau de pointeur vers des objets d'une classe possédant en l'occurence la méthode affichersocle;
cin>>reponse2;
switch(reponse2)
{
case 0:{goto menuprincipal;}break;
for (int k=1; k<1000; k++)
{
case k:{tab[k]->affichersocle();}break;
}
default:cout<<" Erreur de saisie tapez un des chiffres attendus "<<endl;break;
}
remarque tab est un tableau de pointeur vers des objets d'une classe possédant en l'occurence la méthode affichersocle;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ba c'est pas plus compliqué :
Dans ce que tu as écris, je doute qu'une boucle for avec un case soit juste. Et le break porterai sur le for et non sur le switch.
int reponse; int const t [1000]; cin >> reponse; if(reponse==0){ goto menuprincipal;//beurk ! } else if(reponse>0&&reponse<1000){ tab[reponse]->affichersocle(); } else{ cout << "Erreur de saisie, tapez un des chiffres attendus." << endl; }Le problème était ton algo plus qu'autre chose.
Dans ce que tu as écris, je doute qu'une boucle for avec un case soit juste. Et le break porterai sur le for et non sur le switch.