默认在我的开关上不起作用 (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。这是你为自己创造的情况。