比较常数

时间:2013-07-19 15:20:29

标签: c

假设我有以下常量:

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

我希望LUNATIC大于HARD,大于NORMAL,大于EASY。

如何将以下内容定义为:

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

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

3 个答案:

答案 0 :(得分: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 :(得分:2)

使用enum { EASY, NORMAL, HARD, LUNATIC };代替您的常量定义,您的代码就会开始运作。

但是,我无法理解的一件事是你需要比较常数。你知道这些值是编译时间常数!

答案 2 :(得分: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类型的变量,那么您可以立即知道它应该保留哪种值。

要记住枚举器的一件事是它们与整数兼容。这意味着它们并没有真正为您提供任何类型安全性,因为您可以为它们分配任何数值;它主要是关于编写更清晰的代码,而不是类型安全。