Switch语句始终解析为默认值而不是大小写

时间:2012-08-01 00:16:50

标签: switch-statement d evaluate

所以我最近一直在尝试D,因为我认识的许多程序员都建议我通过C ++学习它。

我正在使用DMD Compiler v2.057,这是我的代码:

while(cliLoopC)
{
    write("?> ");
    string iPt_ = std.string.tolower(readln());
    switch (iPt_)
    {
        default: writeln(E_URECCOM); break;
        case "test":
            writeln("Hello!");
            break;
    }
}

程序是这样的,每当我输入test时,它应该转到case而不是default,它只打印E_URECCOM的内容(这是一个常量) char []包含UNRECOGNISED COMMAND\n)。

我不知道发生了什么让它做到这一点。有什么想法吗?

3 个答案:

答案 0 :(得分:13)

是的,在readln结束时有一个\ n。尝试使用std.string.strip(readln());

答案 1 :(得分:6)

嗯...我还没有尝试过D,但也许readln()在字符串末尾包含CR,LF或CR / LF,它应该包含在比较字符串中?

案例“test \ n”:

答案 2 :(得分:4)

编辑: Adam D. Ruppe的回答是正确的答案:

  

是的,在readln结束时有一个\ n。尝试使用std.string.strip(readln());

我只是想把它丢在那里,因为我的答案仍有支票

我的回答: 默认情况是catch all case,因此它在最后看起来最好(并且是传统的)

像这样

while(cliLoopC)
{
    write("?> ");
    string iPt_ = std.string.tolower(readln());
    switch (iPt_)
    {
        case "test":
            writeln("Hello!");
            break;
        default: writeln(E_URECCOM); break;
    }
}