56 votes

Puis-je afficher la valeur d'une énumération avec printf ()?

Existe-t-il une ligne unique qui me permet d'afficher la valeur actuelle d'une énumération?

53voto

bmargulies Points 49855

En tant que chaîne, non. En tant qu'entier,% d.

À moins que vous ne comptiez:

 static char*[] enumStrings = { /* filler 0's to get to the first value, */
                               "enum0", "enum1", 
                               /* filler for hole in the middle: ,0 */
                               "enum2", .... };

...

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.

27voto

Matthieu Points 2091
 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;
}
 

Vous avez juste à jeter l'énumération à l'int!
Sortie: Mon enum Valeur: 2

6voto

DrAl Points 29528

La bonne réponse à cela a déjà été donnée: non, vous ne pouvez pas donner le nom d'une énumération, seulement sa valeur.

Néanmoins, juste pour le plaisir, cela vous donnera une énumération et une table de recherche tout en un et vous donnera un moyen de l'imprimer par son 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.

2voto

BlueTrin Points 2130

Un mec a proposé une idée de préprocesseur intelligent dans ce post

http://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X