C Enum全部为零

时间:2016-10-27 12:14:16

标签: c enums printf zero

我很困惑。

#include "stdio.h"

typedef enum
{
    INTEGER,
    NUMBER,
    FLOAT,
    CHAR,
    ARRAY,
    STRING
} enumType;

typedef struct intType
{
    enumType type;
    int width;
    int value;
} Integer;

typedef struct fltType
{
    enumType type;
    int width;
    double value;
} Float;

Integer make_int(int val)
{
    Integer tmp;
    tmp.type = INTEGER;
    tmp.width = 32;
    tmp.value = val;
    return tmp;
}

int get_int(Integer val)
{
    int tmp = val.value;
    return tmp;
}

Float make_float(double val)
{
    Float tmp;
    tmp.type = FLOAT;
    tmp.width = 32;
    tmp.value = val;
    return tmp;
}

double get_float(Float val)
{
    double tmp = val.value;
    return tmp;
}

int main(void) {

    Integer i = make_int(42);
    printf("Type: %d\nWidth: %d\nValue: %d\n", (int)i.type, i.width, get_int(i));

    Float f = make_float(42.8);
    printf("Type: %d\nWidth: %d\nValue: %f\n", (int)i.type, i.width, get_float(f));

  return 1;

}

这应该输出六行,其中两个"类型"不同。 enumType中的INTEGER和FLOAT。

,而不是...

Type: 0
Width: 32
Value: 42
Type: 0
Width: 32
Value: 42.800000

两者都是0。

即使我修改了枚举,所以这两个数字肯定不同,但它仍然不起作用:

typedef enum
{
    INTEGER = 0,
    NUMBER,
    FLOAT = 1,
    CHAR,
    ARRAY,
    STRING
} enumType;

我不知道出了什么问题。

1 个答案:

答案 0 :(得分:1)

更改第二个printf

printf("Type: %d\nWidth: %d\nValue: %f\n", (int)i.type, i.width, get_float(f));

printf("Type: %d\nWidth: %d\nValue: %f\n", (int)f.type, f.width, get_float(f));