-1
我很困惑。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;
}
這應該輸出六行,其中兩個「類型」不同。 INTUMER和FLOAT來自enumType。
,而不是...
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;
我不知道發生了什麼問題。
您打印'i.type'兩次。當然,它們兩次都是零 – ckruczek
仔細檢查您在第二次printf調用中打印的內容。 – Art
這都是因爲你正在使用'i.type'而不是'f.type'來進行第二個'printf()'調用。 – Sergio