我的开关默认不起作用(c ++)

时间:2015-03-15 00:23:57

标签: c++ qt4

我的问题很难解释,但我不知道要解决它。

在我在下面看到的代码中的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 "";
}

1 个答案:

答案 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 }。这是你为自己创造的情况。