我使用switch Case来选择函数变量是由serial(Ardiuino)实现的。例如,如果我写UP或Up甚至同样的处理并且调用相同的动作 我做到了,但我得到了更长的文字,可以减少它 代码在上面
switch (instruction[0])
{
case 'P' :
switch (instruction[1])
{
case 'A' :
PA(x,y);
break ;
case 'R' :
PR(x,y);
break ;
case 'U' :
PU(x,y);
break ;
case 'D' :
PD(x,y);
break ;
case 'a' :
PA(x,y);
break ;
case 'r' :
PR(x,y);
break ;
case 'u' :
PU(x,y);
break ;
case 'd' :
PD(x,y);
break ;
}
break;
case 'p' :
switch (instruction[1])
{
case 'A' :
PA(x,y);
break ;
case 'R' :
PR(x,y);
break ;
case 'U' :
PU(x,y);
break ;
case 'D' :
PD(x,y);
break ;
case 'a' :
PA(x,y);
break ;
case 'r' :
PR(x,y);
break ;
case 'u' :
PU(x,y);
break ;
case 'd' :
PD(x,y);
break ;
}
break;
case 'T' :
Serial.println("error");
break;
case 'A' :
switch(instruction[1])
{
case 'A' :
AA(x,y,z);
break;
case 'a' :
AA(x,y,z);
break;
}
break;
case 'a':
switch(instruction[1])
{
case 'A' :
AA(x,y,z);
break;
case 'a' :
AA(x,y,z);
break;
}
break;
}
答案 0 :(得分:1)
一种方法是使用开关通过。虽然在您的情况下,您将不得不以嵌套的方式使用它。
像这样。
switch (instruction[0])
{
case 'P' :
case 'p' :
switch (instruction[1])
{
case 'A' :
case 'a' :
PA(x,y);
break ;
case 'R' :
case 'r' :
PR(x,y);
break ;
case 'U' :
case 'u' :
PU(x,y);
break ;
case 'D' :
case 'd' :
PD(x,y);
break ;
}
break;
case 'T' :
case 't' :
Serial.println("error");
break;
case 'A' :
case 'a' :
switch(instruction[1])
{
case 'A' :
case 'a' :
AA(x,y,z);
break;
}
break;
}
请注意,在各种switch语句中不会处理默认情况。如果用户输入值“px”,您需要决定要采取的操作。目前,此代码不采取任何措施。
答案 1 :(得分:0)
更改代码如下:
case 'A' :
AA(x,y,z);
break;
case 'a' :
AA(x,y,z);
break;
为:
case 'A' :
case 'a' :
AA(x,y,z);
break;
你仍然有一些荒谬的代码重复。你为什么不使用像查找表这样的东西?或者甚至是if
/ else if
树,它将消除对所有break
语句的需求?或toupper
?
答案 2 :(得分:0)
您可以使用strcasecmp()
来比较两个字符串,但不关心字符的大小写。
if(strcasecmp(instruction, "pa") == 0)
{
PA(x,y);
}
else if(strcasecmp(intruction, "pr") == 0)
{
PR(x,y);
}
答案 3 :(得分:0)
根据您对这些功能的灵活程度,您可以重构它们,以便将第二个字母作为参数。
所以,而不是
PA(x,y);
PR(x,y);
PU(x,y);
PD(x,y);
...
使用
P( c, x, y );
并移交A
,R
,U
,D
等等(即instruction[1]
)参数c
。< / p>