我很困惑。
#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;
我不知道出了什么问题。
答案 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));