Re: [語法] switch case

看板C_and_CPP (C/C++)作者 (喲)時間16年前 (2009/04/22 09:09), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/22 10:36, , 1F
後面的兩個 if 要在第二個前面加 else :D
04/22 10:36, 1F

04/22 10:36, , 2F
不然所有東西都會被變成大寫
04/22 10:36, 2F

04/22 13:31, , 3F
ch ^= 32 就好了
04/22 13:31, 3F
這樣是沒錯啦,但是"防守範圍"沒那麼大,還是只換需求範圍內的東西就好. 此外,這是討論範圍之外的東西.

04/22 13:49, , 4F
還是要判斷ch是否是英文字母先, 還有其實我真的搞不懂
04/22 13:49, 4F

04/22 13:50, , 5F
原po到底大小寫是要怎麼轉....Orz
04/22 13:50, 5F

04/22 14:52, , 6F
這個是從Duff's Device改來的
04/22 14:52, 6F
※ 編輯: yauhh 來自: 59.112.225.34 (04/22 14:56)
文章代碼(AID): #19xcvJut (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
6
15
完整討論串 (本文為第 2 之 2 篇):
3
6
6
15
文章代碼(AID): #19xcvJut (C_and_CPP)