variable uniones tipo que programacion instruccion imprimir enumeraciones enum crear c printf enums

tipo - uniones y enumeraciones en c



¿Puedo mostrar el valor de una enumeración con printf()? (6)

La respuesta correcta a esto ya ha sido dada: no, no puedes dar el nombre de una enumeración, solo su valor.

Sin embargo, solo por diversión, esto le dará una enumeración y una tabla de búsqueda, todo en uno, y le dará la posibilidad de imprimirlo por su nombre:

C Principal:

#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

Descargo de responsabilidad: no hagas esto.

¿Hay una línea que me permita dar salida al valor actual de una enumeración?


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; }

¡Solo tienes que enviar enum a int!
Salida: Mi valor enum: 2


enum A { foo, bar } a; a = foo; printf( "%d", a ); // see comments below


Yo tuve el mismo problema.

Tuve que imprimir el color de los nodos donde estaba el color: enum col { WHITE, GRAY, BLACK }; y el nodo: typedef struct Node { col color; }; typedef struct Node { col color; };

Intenté imprimir node->color con printf("%s/n", node->color); pero todo lo que obtuve en la pantalla fue (null)/n .

La respuesta bmargulies dio casi resuelto el problema.

Entonces mi solución final es:

static char *enumStrings[] = {"WHITE", "GRAY", "BLACK"}; printf("%s/n", enumStrings(node->color));


Como una cadena, no. Como un entero,% d.

A menos que cuentes:

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]);

Esto no funcionará para algo así como una enum of bit masks. En ese punto, necesita una tabla hash u otra estructura de datos más elaborada.