看板 C_and_CPP 關於我們 聯絡資訊
大一 有一題題目問道 輸入一種語言的你好 並輸出他是哪種語言 共有6種 其餘輸出UNKNOWN (一律使用大寫) 輸入 # 時跳出 http://codepad.org/23dYbAua 這是我的程式碼 不管輸入甚麼都是UNKNOWN 我目前的理解是 字串最後會以\0做結尾 然後怕有殘值所以要用memset清空 請問我是對那裡不夠清楚造成我無法解題 可以的話請給我方向 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.210.147 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1547985401.A.F72.html
Hurricaneger: break是啥意思? 01/20 20:10
crazycy: C的字串(字元陣列)不能用==比較 請參見strcmp() 01/20 20:13
v86861062: 應該要用字串比較的函數吧 strcmp 01/20 20:13
jerryh001: 字串清空第一格放\0就好 然後printf不用\0應該是\n換行 01/20 20:16
那如果我用puts就要用\0嗎?
idiont: 使用雙引號包起來的字串都會自動加上\0 不用自己加 01/20 20:52
idiont: scanf讀進來的字串也會在結尾自動加上\0 01/20 20:54
idiont: \0後面的內容不會有影響 所以也不必初始化char陣列 01/20 20:54
http://codepad.org/8d9o7wpk 結果還是錯= = 我到底哪裡做錯了 是指標那邊嗎 因為直接宣告他會要我加指標 ※ 編輯: timmy999 (180.217.210.147), 01/20/2019 20:57:01
Neisseria: https://pastebin.com/N3npZGy1 你要這個效果嗎? 01/20 21:11
a1u1usul3: strcmp相等的狀態會回傳0,造成他不會進入,要改成!str 01/20 21:18
a1u1usul3: cmp()或者strcmp()==0 01/20 21:18
了解了 謝謝 ※ 編輯: timmy999 (36.238.37.173), 01/20/2019 21:56:45
dces4212: 提醒一下 ==只能比較字元 假如比較字串應該是未定義行 01/20 22:55
dces4212: 為 然後a == 這邊的a是dereference出a[0] 01/20 22:55
idiont: a的值是&a[0] 然後雙引號字串的值是字串的起始位置 01/21 00:05
idiont: a是放在stack中 雙引號字串放在data section 所以他們的值 01/21 00:06
idiont: 一定不一樣 01/21 00:06
LPH66: 基本觀念: C 字串 = 以 \0 結束的字元陣列 01/21 08:40
LPH66: 所以幾乎所有操作都是以整個陣列為主 01/21 08:40
LPH66: 那因為運算子對陣列沒有定義, 故這些操作都不是使用運算子 01/21 08:41
LPH66: 那既然是使用一系列函數來操作那就要仔細看函數的回傳值 01/21 08:42
LPH66: strcmp 並不只比較等不等, 所以你需要把其結果和 0 比較 01/21 08:43
LPH66: 另外不確定你們老師有沒有教, 不過請學著用 debugger 01/21 08:44
LPH66: 有些東西用 debugger 可以容易知道問題在什麼地方 01/21 08:45
dces4212: sor a不是dereference 說錯了 a[0]才是 01/21 18:35
jxzhe: https://ideone.com/3ddCLo 01/24 03:00