Difficulté en C++

Ophelie -  
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!

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
non, aucun. sauf de ne pas utiliser switch
1
Bilow
 
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   Statut Contributeur Dernière intervention   1 299
 
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
Ophélie
 
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   Statut Contributeur Dernière intervention   1 299
 
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
Revan80
 
Pourquoi int const t [1000] et non pas int const t (1000)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
parceque c'est pas pareil et ne donne pas la même chose.
0