我的问题很难解释,但我不知道要解决它。
在我在下面看到的代码中的switch语句中,默认情况不起作用,但如果我删除最后一个return "";
工作正常。
像这么简单的东西会让人走上苦涩的道路吗?
提前问候并非常感谢
QString sim900::loop() {
QString text = readSerial();
if (text != "")
{
QStringList commands;
// 0 1 2 3 4 5
commands << "+RECEIVE" << " CLOSED" << "REMOTE IP: " << "+CMTI: " << "+CSQ: " << "+CIPSEND=";
for (int n=0; n<commands.length(); n++)
{
if (text.indexOf(commands[n]) != -1)
switch (n)
{
case 0:
SocketReceive(text, false);
break;
case 1:
DropClient(text);
break;
case 2:
NewClient(text);
break;
case 3:
break;
case 4:
EstadoRed(text);
break;
case 5:
ReadyToSend(text);
break;
default:
if (n == commands.length()-1)
return text;
}
}
}
return "";
}
答案 0 :(得分:0)
考虑一下......
for(int n = 1; n < 2; ++n) {
switch (n) {
case 0:
break;
default:
std::cout << "Whoops!";
}
}
这将打印&#34;哎呀!&#34;一旦。那是因为我从我处理的案件开始 - 一个默认案例。
现在,考虑一下......
int commandsLength = 6;
for(int n = 0; n < commandsLength; ++n) {
switch (n) {
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
if (n == commandsLength - 1)
std::cout << "Whoops!";
}
}
并且永远无法联系到default
这一事实,因为我处理5
案例并且由于for
n
上的条件不能>= 6
}。这是你为自己创造的情况。