默认在我的开关上不起作用 (c++)
default is not working on my switch (c++)
我的问题解释起来很简单,但我不知道如何解决。
在您可以在下面看到的代码中的 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 "";
}
考虑这个...
for(int n = 1; n < 2; ++n) {
switch (n) {
case 0:
break;
default:
std::cout << "Whoops!";
}
}
这将打印 "Whoops!" 一次。那是因为我从我处理的案例之外开始——默认案例。
现在,考虑这个...
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
。这是你为自己创造的情况。
我的问题解释起来很简单,但我不知道如何解决。
在您可以在下面看到的代码中的 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 "";
}
考虑这个...
for(int n = 1; n < 2; ++n) {
switch (n) {
case 0:
break;
default:
std::cout << "Whoops!";
}
}
这将打印 "Whoops!" 一次。那是因为我从我处理的案例之外开始——默认案例。
现在,考虑这个...
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
。这是你为自己创造的情况。