3

所以我最近一直在尝试 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)。

我看不出发生了什么让它这样做。有任何想法吗?

4

3 回答 3

13

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

于 2012-08-01T00:25:01.560 回答
6

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

案例“测试\ n”:

?

于 2012-08-01T00:21:30.320 回答
4

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

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

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

我的回答:默认情况是包罗万象的情况,所以最后看起来最好(并且是常规的)

像这样

while(cliLoopC)
{
    write("?> ");
    string iPt_ = std.string.tolower(readln());
    switch (iPt_)
    {
        case "test":
            writeln("Hello!");
            break;
        default: writeln(E_URECCOM); break;
    }
}
于 2012-08-01T00:19:23.783 回答