假设我有以下常量:
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;
}
答案 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
类型的变量,那么您可以立即知道它应该保留哪种值。
要记住枚举器的一件事是它们与整数兼容。这意味着它们并没有真正为您提供任何类型安全性,因为您可以为它们分配任何数值;它主要是关于编写更清晰的代码,而不是类型安全。