Fonction switch et équivalent

gromhouleux Messages postés 3 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 21 mai 2010 - 21 mai 2010 à 15:49
gromhouleux Messages postés 3 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 21 mai 2010 - 21 mai 2010 à 17:47
Bonjour,

en fait je cherche un équivalent à la fonction switch en C++.
Je m'explique,Switch permet de faire une action en fonction d'une valeur entière d'une variable.
ex:
switch(A)
{ case 1: B=10;break;
case 2: B=20;break;
case 3: B=30;break;
case 4: B=40;break;
default: B=0;break;
}

Ce qui m'ennuie c'est que je voudrait faire la même chose qu'avec un switch mais avec des comparaisons au lieu de valeurs entières.

ex:
switch(A)
{ case <5: B=10;break;
case <10: B=20;break;
case <15: B=30;break;
case <20: B=40;break;
default: B=0;break;
}

Y'aurait t'il une fonction qui me permettrait de faire ça et m'éviterait d'utiliser 4 ou 5 "IF THEN ELSE" assez disgracieux ?

Merci d'avance.

5 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
21 mai 2010 à 16:32
Salut,

Pour ma part je ne vois pas ce qu'une condition if(...) a de disgracieux.
C'est plus court a écrire et tout aussi compréhensible, en c++ il n'y a pas de then, si tu veux faire du vb t'es pas sur le bon forum.

Pour répondre à ta question, un switch n'ait pas fait pour travailler sur des interval.

Ton exemple ce résume donc a ca :

if(a < 5){
b = 10;
}else if(a < 10){
b = 20;
}
...

Shell
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 mai 2010 à 16:37
"switch" n'est pas une fonction, mais on mot clé du langage, un mechanisme.
Non, tu ne peux pas. D'ailleurs si ton exemple était possible, et que "A" valait 1, alors il entrerait dans tous les "case" (1 est bien inférieur à 20, à 10, etc...).

Au pire tu peux faire un:
switch(A)
{
  case 1: case 2: case 3: case 4: case 5: B = 10; break;
  case 6: case 7: case 8: case 9: case 10: B = 20; break;
  etc...
  default: B = 0; // Pas besoin de break dans un default
}


Autres solutions, si tu ne dois qu'associer des valeurs à d'autre choses:
- Tu peux utiliser une std::map
- Tu peux utiliser un vecteur de pair et faire une recherche dedans


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
gromhouleux Messages postés 3 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 21 mai 2010
21 mai 2010 à 17:22
Merci pour vos réponses, je vais donc utiliser des IF.

En ce qui concerne ce que tu dis:"D'ailleurs si ton exemple était possible, et que "A" valait 1, alors il entrerait dans tous les "case" (1 est bien inférieur à 20, à 10, etc...)",je pensais que le break aurait permis de sortir du "pseudo-switch" dès qu'on serait tombé sur une condition vrai.

Je cherchais juste à savoir si il y avait une autre solution simple,j'aime pas trop la redondance de IF au niveau de l'aspect visuel même si je sais bien que le programme fonctionnera tout aussi bien.

Encore merci d'avoir répondu si rapidement.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 mai 2010 à 17:25
En ce qui concerne ce que tu dis:"D'ailleurs si ton exemple était possible, et que "A" valait 1, alors il entrerait dans tous les "case" (1 est bien inférieur à 20, à 10, etc...)",je pensais que le break aurait permis de sortir du "pseudo-switch" dès qu'on serait tombé sur une condition vrai.


Ce que je voulais dire, ce que ton "switch" n'aurait pas su dans quel "case" aller (vu que toute les cases étaient valides).
Le break permet bien de sortir du "switch".
La question, et donc la réponse, restent théoriques, vu que ton exemple n'est pas possible :).

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0

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

Posez votre question
gromhouleux Messages postés 3 Date d'inscription mercredi 12 mai 2010 Statut Membre Dernière intervention 21 mai 2010
21 mai 2010 à 17:47
Ok je vois ce que tu voulais dire, visiblement j'avais pas bien compris le fonctionnement du switch,je pensais qu'il lisait les lignes les unes après les autres et s'arrêtait des qu'il tombait sur le bon case.
Mais maintenant je me rappelle qu'on ne doit pas mettre 2 "case" avec la même valeur,ça aurait du me mettre la puce à l'oreille.
Mais je reste étonné qu'il n'existe pas de "mots clef" (je doit commencer à employer les bon termes ou ça me jouera des tours un jour...) pour faire ce que je voulais au départ.
0
Rejoignez-nous