1

假设我有以下常量:

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

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

我如何在以下工作的情况下定义它们:

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

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

3 回答 3

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;
}
于 2013-07-19T15:27:39.380 回答
2

使用enum { EASY, NORMAL, HARD, LUNATIC };而不是您的常量定义,您的代码将开始工作。

但是,我无法理解的一件事是您需要比较常量。您知道这些值,因为它们是编译时常量!

于 2013-07-19T15:26:35.353 回答
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,这有助于使代码更具可读性;如果你看到一个 type 的变量Difficulty,那么你会立即知道它应该持有什么样的值。

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

于 2013-07-19T15:37:19.253 回答