2013-07-19 84 views
1

假設我有以下常量:比較常數

const char EASY = 'E'; 
const char NORMAL = 'N'; 
const char HARD = 'H'; 
const char LUNATIC = 'L'; 

我想瘋子比硬,這是比正常的,這是比EASY的大於更大。

如何定義它們的方式在下面的工作:

int main(){ 
    char diff1 = LUNATIC; 
    char diff2 = NORMAL; 

    if (diff1 > diff2){ 
     printf("Lunatic is harder than normal"); 
    } 
    return 0; 
} 
+12

一個字:'enum' – Kevin

+5

'enum {EASY,NORMAL,HARD,LUNATIC};' – 2013-07-19 15:22:12

+1

當你有常量時,你通常會知道它們之間的關係。你爲什麼要檢查他們之間的平等? – Maroun

回答

4

使用枚舉:

enum Difficulty 
{ 
    EASY, 
    NORMAL, 
    HARD, 
    LUNATIC 
}; 

int main(){ 
    char diff1 = LUNATIC; 
    char diff2 = NORMAL; 

    if (diff1 > diff2){ 
     printf("Lunatic is harder than normal"); 
    } 
    return 0; 
} 
+1

現在我也能夠理解,'enum'是什麼意思,它是如何工作的。即使以@ LChaos2的名義,謝謝! –

2

使用enum { EASY, NORMAL, HARD, LUNATIC };,而不是你的常量定義,你的代碼將開始工作。

但是,我無法理解的一件事是您需要比較常量。你知道這些值是編譯時常量!

0

有幾種方法。清潔解決方案是使用枚舉,這些都保證已經增加積分值:

typedef enum Difficulty { 
    Easy, 
    Normal, 
    Hard, 
    Lunatic 
} Difficulty; 

這可以像這樣使用:

void foo(Difficulty a, Difficulty b) 
{ 
    if (a > b) { 
     // ... 
    } else 
    // ... 
} 

// ... 

Difficulty a = Easy; 
Difficulty b = Hard; 
foo(a, b); 

其他方法也是可能的。你可以使用增加值的宏:

#define EASY 0 
#define NORMAL 1 
#define HARD 2 
#define LUNATIC 3 

你目前的方法也可以,但是你沒有理由使用實際字符作爲常量。你可以用數值來代替:

const char EASY = 0; 
const char NORMAL = 1; 
const char HARD = 2; 
const char LUNATIC = 3; 

當然,而且也沒有真正的原因,據我可以看到,會要求您使用char常量。您可以改用int

第一種方法(使用枚舉器)通常是首選方法,因爲它爲您提供了可以使用的實際typedef,這有助於使代碼更具可讀性;如果您看到類型爲Difficulty的變量,那麼您立即知道它預期會保持什麼樣的值。

需要記住的一點是,它們與整數兼容。這意味着它們並不真正給你任何類型的安全,因爲你可以給它們分配任何數值;它主要是爲了編寫更簡潔的代碼,而不是類型安全。