[A priori RESOLU] question pour un cas de si multiple

question pour un cas de si multiple [A priori RESOLU] - C++ - Programmation

Marsh Posté le 26-11-2018 à 11:09:40    

Bonjour à tous,
 
J'aurais voulu savoir s'il était possible d'utiliser une variable de type char, comprenant plusieurs caractères dans un switch.
 
J'ai cru comprendre que la variable char dans le cadre d'un switch était un int déguisé, et j'aimerai proposer, pour un effet plus intuitif, autre chose que des lettres ou ou des numéros en guise de saisie.
 
Est-ce donc possible? Et si oui, pourriez vous m'indiquer la démarche à suivre, ou m'aiguiller dans la recherche d'une solution?
 
Merci


Message édité par jean-michel-kevin le 28-11-2018 à 14:59:38
Reply

Marsh Posté le 26-11-2018 à 11:09:40   

Reply

Marsh Posté le 27-11-2018 à 02:05:04    

Le seul moyen à ma connaissance d'utiliser une chaîne de caractères (char *) pour lister les cas, c'est d'enchaîner les if / else if [:spamafote]
 
et pour comparer les chaînes, tu peux utiliser la fonction 'strcmp' ;)


---------------
Non
Reply

Marsh Posté le 27-11-2018 à 12:09:50    

Merci le petit, c'est sympa de se serrer les coudes entre jean :)

Reply

Marsh Posté le 27-11-2018 à 15:41:07    

Citation :

et pour comparer les chaînes, tu peux utiliser la fonction 'strcmp' ;)

Selon les circonstances strNcmp est mieux. :o

 
PetitJean a écrit :

Le seul moyen à ma connaissance d'utiliser une chaîne de caractères (char *) pour lister les cas, c'est d'enchaîner les if / else if[:spamafote]

Si les chaînes font 8 octets ou moins on peut très bien utiliser switch. :whistle:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. //système 64 bits soit 8 octets par unsigned int
  5. unsigned int to_int(const char const * s)
  6. {
  7. int i;
  8. unsigned int r=0;
  9. for(i=0; i<strlen(s); i++)
  10. {
  11.  r|=s[i]<<(8*i);
  12. }
  13. return r;
  14. }
  15. int main(void)
  16. {
  17. char string[10];
  18. while (1)
  19. {
  20.  printf("? " );
  21.  scanf("%s", string); //oui oui, buffer overflow et toussa, peu importe ici
  22.  switch(to_int(string))
  23.  {
  24.   case 1969581154: printf("bleu!" ); break;
  25.   case 1735749495: printf("rouge!" ); break;
  26.   case 1851881327: printf("orange!" ); break;
  27.   case 1953069157: printf("bye!" ); return 0; break; //"exit"
  28.   default: break;
  29.  }
  30.  printf("\n" );
  31. }
  32. return 0;
  33. }


Nan, sérieusement, faut pas faire ça bien sûr! :o
(Entre parenthèse, quelqu'un arrive à trouver une version de to_int() qui donne une constante au moment de la compilation pour la mettre dans le switch? J'ai testé avec une macro, aucune chance. C'est juste pour ma culture perso...)


Message édité par rat de combat le 27-11-2018 à 15:51:22
Reply

Marsh Posté le 28-11-2018 à 00:49:11    

ok merci pour tout

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed