我实际上在c ++中有一个枚举:
class myClass
{
public:
enum ExampleType
{
TEST1
TEST2
TEST3
TEST4
}
};
我想将枚举打印为数字而不是字符串.. 实际上它打印 0 .. 1 .. 2 .. 3 我想打印 TEST1 或 TEST2 等......
我已经尝试将Switch案例改为:
std::string type;
switch (this->type)
{
case 0: type = "TEST1";
case 1: type = "TEST2";
case 2: type = "TEST3";
case 3: type = "TEST4";
}
然后打印类型,但他没有进入正确的情况..
怎么可能?
答案 0 :(得分:3)
在C / C ++中,case
语句失效。您必须使用break
退出switch语句。如果this->type
为0,则执行的代码为:
type = "TEST1";
type = "TEST2";
type = "TEST3";
type = "TEST4";
你想要的是:
switch( this->type )
{
case TEST1: type = "TEST1";
break;
case TEST2: type = "TEST2";
break;
//...
}
或者,如果您有一个返回此值的函数,只需返回值:
std::string type_string()
{
switch( this->type )
{
case TEST1: return "TEST1";
case TEST2: return "TEST2";
//...
default: return std::string::empty();
}
}
注意:(自@ DoxyLover的注释)我改变了开关以使用声明的枚举常量,因为你应该使用它们。如果有人在枚举的开头添加了TEST0
,那么switch语句仍会正确执行,而你的版本则不会。
答案 1 :(得分:2)
除了其他答案,您还可以执行以下操作:(C99)
#include <ansi_c.h>
enum ExampleType
{
TEST1,
TEST2,
TEST3,
TEST4,
TEST_MAX
};
const char string[TEST_MAX][10]={"TEST1","TEST2","TEST3","TEST4"};
int main(void)
{
int i;
for(i=0;i<TEST_MAX;i++)
{
printf("%d: %s\n", i, string[i]);
}
return 0;
}
答案 2 :(得分:1)
在switch-case语句中,评估在案例之间进行。这就是if-else的独特之处,其中关键词“else”确保只选择一组指令。在每个案例结尾添加一个休息时间,以防止这是一种良好的做法。
答案 3 :(得分:1)
如果您知道在编译时要打印的内容,可以使用这样的预处理器:
<强>代码强>
#define STRINGIFY(word) (#word)
int main(void)
{
printf("%d %s\n", TEST2, STRINGIFY(TEST2));
return 0;
}
<强>输出强>
1 TEST2
大但
然而,这与这样做完全没有区别:
printf("%d TEST2\n", TEST2);