impossible de faire un switch sur un char* - C++ - Programmation
Marsh Posté le 21-03-2003 à 09:28:55
Il me semble en effet qu'en C le switch/case ne fonctionne que sur des nombres....donc il faut que tu travailles a base de if/else if. A confirmer.
Marsh Posté le 21-03-2003 à 09:30:33
Oui, en effet...
On peut faire un switch soit sur un char, soit sur un int
mais pas sur un char *, ni sur un string
C'est dans certains cas bien dommage...
kason
Marsh Posté le 21-03-2003 à 09:31:29
"char * == char *" ca compare les addresses, pas le contenu
Fo attaquer ca a l'if/else a grand coup de strcmp(...)==0
Marsh Posté le 21-03-2003 à 09:31:52
KSauzeRK a écrit : Il me semble en effet qu'en C le switch/case ne fonctionne que sur des nombres....donc il faut que tu travailles a base de if/else if. A confirmer. |
oui, c'est ce qu'il disent dans l'aide. Mais etant donne que ca fonctionne avec les char, je pensais que ca pouvait peut etre aussi fonctionner avec le contenu d'un char*
En route pour une belle boucle de if/ else if alors.
Marsh Posté le 21-03-2003 à 09:32:45
chrisbk a écrit : "char * == char *" ca compare les addresses, pas le contenu |
Ce qui m'interesse est de comparer le contenu malheureusement
EDIT : j'ai meme essaye avec des strcmp dans mon case mais sans resultat
case (strcmp(token,"STA" ))==0):
Marsh Posté le 21-03-2003 à 09:34:24
polo021 a écrit : |
oui mais la tu respecte pu trop la grammaire du case
Marsh Posté le 21-03-2003 à 09:39:20
ReplyMarsh Posté le 21-03-2003 à 09:40:13
Si tu as un grand nombre de chaines tu peux faire du hachage
(transformer tes chaines en nombre).
Si tu as un seul cas à traiter un if strcmp else c'est largement suffisant comme ca..
LeGreg
Marsh Posté le 21-03-2003 à 09:57:20
legreg a écrit : Si tu as un grand nombre de chaines tu peux faire du hachage |
Non, ce n'est pas assez imposant que pour s'embarquer dans du hachage.
Merci quand meme pour l'idee.
Marsh Posté le 22-03-2003 à 07:48:24
En C/C++ switch est limité. IL ne marche qu'avec:
1) Des entiers.
Anciennement des flottants aussi, mais c'est déprécié.
(A ce stade-là on pourrait encore caster en bon gros bourrain)
2) Des valeurs de "case" constante de compilation.
Ce n'est malheureusement pas le cas de adresses, ou du résultat d'un typeid en C++.
Marsh Posté le 21-03-2003 à 09:23:03
a la compilation (sur la ligne case "STA" :
error C2051: case expression not constant
Est ce que je me suis trompe ou alors est il tout simplement impossible de faire un switch sur le contenu d'un char* ?
Merci