Citation :
et pour comparer les chaînes, tu peux utiliser la fonction 'strcmp'
|
Selon les circonstances strNcmp est mieux.
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
|
Si les chaînes font 8 octets ou moins on peut très bien utiliser switch.
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //système 64 bits soit 8 octets par unsigned int
- unsigned int to_int(const char const * s)
- {
- int i;
- unsigned int r=0;
- for(i=0; i<strlen(s); i++)
- {
- r|=s[i]<<(8*i);
- }
- return r;
- }
- int main(void)
- {
- char string[10];
- while (1)
- {
- printf("? " );
- scanf("%s", string); //oui oui, buffer overflow et toussa, peu importe ici
- switch(to_int(string))
- {
- case 1969581154: printf("bleu!" ); break;
- case 1735749495: printf("rouge!" ); break;
- case 1851881327: printf("orange!" ); break;
- case 1953069157: printf("bye!" ); return 0; break; //"exit"
- default: break;
- }
- printf("\n" );
- }
- return 0;
- }
|
Nan, sérieusement, faut pas faire ça bien sûr!
(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