C 枚举全为零
C Enum is all Zeroes
我比较迷茫。
#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;
}
这应该输出六行,其中两行 "types" 不同。来自 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;
我不知道出了什么问题。
秒变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));
我比较迷茫。
#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;
}
这应该输出六行,其中两行 "types" 不同。来自 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;
我不知道出了什么问题。
秒变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));