Difficulté en C++

Fermé
Ophelie - 25 févr. 2010 à 16:17
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 2 mars 2016 à 10:31
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!

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
25 févr. 2010 à 16:58
non, aucun. sauf de ne pas utiliser switch
1
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 :

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 ;)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
26 févr. 2010 à 08:08
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.
0
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;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
26 févr. 2010 à 10:47
ba c'est pas plus compliqué :
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.
0
Pourquoi int const t [1000] et non pas int const t (1000)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 mars 2016 à 10:31
parceque c'est pas pareil et ne donne pas la même chose.
0