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