Y a-t-il une ligne qui me permet de sortir la valeur actuelle d'un enum?
En tant que chaîne, non. En tant qu'entier,% d.
Sauf si vous comptez:
static char* enumStrings[] = { /* filler 0's to get to the first value, */
"enum0", "enum1",
/* filler for hole in the middle: ,0 */
"enum2", "enum3", .... };
...
printf("The value is %s\n", enumStrings[thevalue]);
Cela ne fonctionnera pas pour quelque chose comme une énumération de masques de bits. À ce stade, vous avez besoin d'une table de hachage ou d'une autre structure de données plus élaborée.
enum MyEnum
{ A_ENUM_VALUE=0,
B_ENUM_VALUE,
C_ENUM_VALUE
};
int main()
{
printf("My enum Value : %d\n", (int)C_ENUM_VALUE);
return 0;
}
Il vous suffit de lancer énum en int!
Sortie: Mon enum Valeur: 2
La bonne réponse à cela a déjà été donnée: non, vous ne pouvez pas donner le nom d'une énumération, mais seulement sa valeur.
Néanmoins, juste pour le plaisir, cela vous donnera une énumération et un tableau de recherche tout en un et vous donnera le moyen de l’imprimer par nom:
principal c:
#include "Enum.h"
CreateEnum(
EnumerationName,
ENUMValue1,
ENUMValue2,
ENUMValue3);
int main(void)
{
int i;
EnumerationName EnumInstance = ENUMValue1;
/* Prints "ENUMValue1" */
PrintEnumValue(EnumerationName, EnumInstance);
/* Prints:
* ENUMValue1
* ENUMValue2
* ENUMValue3
*/
for (i=0;i<3;i++)
{
PrintEnumValue(EnumerationName, i);
}
return 0;
}
Enum.h:
#include <stdio.h>
#include <string.h>
#ifdef NDEBUG
#define CreateEnum(name,...) \
typedef enum \
{ \
__VA_ARGS__ \
} name;
#define PrintEnumValue(name,value)
#else
#define CreateEnum(name,...) \
typedef enum \
{ \
__VA_ARGS__ \
} name; \
const char Lookup##name[] = \
#__VA_ARGS__;
#define PrintEnumValue(name, value) print_enum_value(Lookup##name, value)
void print_enum_value(const char *lookup, int value);
#endif
Enum.c
#include "Enum.h"
#ifndef NDEBUG
void print_enum_value(const char *lookup, int value)
{
char *lookup_copy;
int lookup_length;
char *pch;
lookup_length = strlen(lookup);
lookup_copy = malloc((1+lookup_length)*sizeof(char));
strcpy(lookup_copy, lookup);
pch = strtok(lookup_copy," ,");
while (pch != NULL)
{
if (value == 0)
{
printf("%s\n",pch);
break;
}
else
{
pch = strtok(NULL, " ,.-");
value--;
}
}
free(lookup_copy);
}
#endif
Avertissement: ne faites pas cela.
Un mec a mis au point une idée de préprocesseur intelligent dans ce post
Un moyen facile d'utiliser des variables de types enum comme chaîne dans C?
enum A { foo, bar } a;
a = foo;
printf( "%d", a ); // see comments below
J'ai eu le même problème.
Je devais imprimer la couleur des nœuds où la couleur était: enum col { WHITE, GRAY, BLACK };
et le nœud: typedef struct Node { col color; };
J'ai essayé d'imprimer node->color
avec printf("%s\n", node->color);
mais tout ce que j'ai à l'écran était (null)\n
.
La réponse bmargulies a presque résolu le problème.
Donc ma solution finale est:
static char *enumStrings[] = {"WHITE", "GRAY", "BLACK"};
printf("%s\n", enumStrings[node->color]);