所以我最近一直在嘗試D,因爲我知道很多程序員都推薦我通過C++學習它。開關語句總是解析爲默認值而不是案例
我使用的DMD編譯器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(這是一個常量字符[],其中包含UNRECOGNISED COMMAND\n
)的內容。
我沒有看到發生了什麼事情使它做到這一點。有任何想法嗎?
開關語句總是輸入第一個可能的匹配,然後繼續通過其他案例標籤,直到他們找到中斷或結束。這就是爲什麼默認應該結束。 – RedX 2012-08-01 00:19:31
@RedX剛剛測試過,默認情況下不是這樣(至少在DMD的情況下)。對於常規情況下的情況,情況確實如此(也經過測試)。默認可以去任何地方,但是它的約定(在我看來,這是很好的理由)將它貼在底部。 – eco 2012-08-01 00:31:45
雖然這看起來很愚蠢。沒有辦法像這樣......無論如何,在頂部看到'default'是非常具有誤導性的。 – Mehrdad 2012-08-01 00:51:59