作者yauhh (喲)
看板C_and_CPP
標題Re: [語法] switch case
時間Wed Apr 22 09:09:36 2009
※ 引述《SATSUGAI (約翰‧克勞薩二世)》之銘言:
: 因程式碼需求
: switch(ch)
: {
: case ch1:
: do something;
: break;
: case ch2:
: do something;
: break;
: ...
: }
: 當ch是大寫A的時候,ch1是小寫b ch3是小寫c
: ch是小寫a的時候,ch1是小寫B ch3是小寫C
: 我打算寫成一個switch,然後用AscII去加減處理
: 可是compile以後出現錯誤訊息
: "error: case label does not reduce to an integer constant"
你想做的是讓語言比較活,例如設定讓 'A' 符合 'a', 而讓 'b' 符合 'B'.
但是, switch-case 就是最基本的語法,而且沒有辦法擴充它語言的功能.
switch-case 的意思是,建立一個轉接點,在什麼情況可以轉接到什麼管道,
若像例子中大小寫恰好彼此互換,其實直接把case全都互換就好了.
而若是要把ch的大寫字母看成小寫,直接轉接成小寫字母,在語言能力可能做不到,
也許改成:
match = false;
do {
switch (ch) {
case 'a':
if (!match)
ch = 'A';
else {
do_a();
break;
}
case 'A'
if (!match)
ch = 'a';
else {
doA();
break;
}
case 'B':
...
default:
...
} while (!match && match = true);
}
目標達到了,但要多寫好多東西.
倒不如結構化設計程式:
if (ch >= 'A' && ch <= 'Z')
ch += ('a' - 'A');
if (ch >= 'a' && ch <= 'z')
ch -= ('a' - 'A');
switch (ch) {
case 'a':
do_a();
break;
case 'A':
doA();
break;
...
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.225.34
推 LPH66:後面的兩個 if 要在第二個前面加 else :D 04/22 10:36
→ LPH66:不然所有東西都會被變成大寫 04/22 10:36
推 gozha:ch ^= 32 就好了 04/22 13:31
這樣是沒錯啦,但是"防守範圍"沒那麼大,還是只換需求範圍內的東西就好.
此外,這是討論範圍之外的東西.
推 VictorTom:還是要判斷ch是否是英文字母先, 還有其實我真的搞不懂 04/22 13:49
→ VictorTom:原po到底大小寫是要怎麼轉....Orz 04/22 13:50
→ yauhh:這個是從Duff's Device改來的 04/22 14:52
※ 編輯: yauhh 來自: 59.112.225.34 (04/22 14:56)