VC switch语句中,以字符串作为case的条件可以吗?

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:56:33
如题,我想以字符串作为case语句的判断条件,结果返回错误:
switch(ch)
{
case "ERR01":
m_strEditReceiveMsg+="未知指令";
break;
case "ERR02":
m_strEditReceiveMsg+="数据无效";
break;
case "ERR03":
m_strEditReceiveMsg+="指令功能禁止";
break;
case "ERR04":
m_strEditReceiveMsg+="系统被急停";
break;
case "ERR05":
m_strEditReceiveMsg+="碰软限位停止";
break;
case "ERR06":
m_strEditReceiveMsg+="到X轴负硬限位停止";
break;
case "ERR07":
m_strEditReceiveMsg+="到X轴正硬限位停止";
break;
case "ERR08":
m_strEditReceiveMsg+="到X轴零位停止";
break;
case "ERR09":
m_strEditReceiveMsg+="到Y轴负硬限位停止";
break;
case "ERR10":
m_strEditReceiveMsg+="到Y轴正硬限位停止";
break;
case "

不能
但是你可以把错误代码 宏定义 解决
比如 define ERR01 1

不能,只接受int型
如果你非要这么做,可以定义宏变量!

你可以提取ERR01 ERR02这些字符后面的两个数字,转化为整形然后在switch

c++和java语言中的switch都是只接受 整型

c#语言中可以在switch中,以字符串作为case的条件。

我觉得宏定义不行,用map尝试一下,下面是给你一个例子。

map<string,int> errorMap;

errorMap.insert(map<string,int>::value_type("ERR01",1));
errorMap.insert(map<string,int>::value_type("ERR02",2));
errorMap.insert(map<string,int>::value_type("ERR03",3));

char ch[12] ="ERR01";
switch(errorMap[ch])
{
case 1:
m_strEditReceiveMsg+="未知指令";
break;
case 2:
m_strEditReceiveMsg+="数据无效";
break;
case 3:
m_strEditReceiveMsg+="指令功能禁止";
break;
default:
m_strEditReceiveMsg += ch;
break;
}<