看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform):VS2013 問題(Question): 小弟在寫身分證驗證時,遇到字串不能進行計算這問題所以GOOGLE了一下 知道了後面加個-'0'就可計算 Y = x[0] + 9 * x[1] + 8*(id[1] - '0') + 7*(id[2] - '0') + 6*(id[3] - '0') + 5*(id[4] - '0') + 4*(id[5] - '0') + 3*(id[6] - '0') + 2*(id[7] - '0') + 1*(id[8] - '0')+(id[9] - '0'); 但是為何宣告要這樣才能過啊...求解釋謝謝大大!! char id[11]; id[10] = '\0'; 這樣就不行如圖下 然後跑出這錯誤視窗 char id[10]; http://ppt.cc/hruE 程式碼(Code):http://ideone.com/xQFzzk -- 願翱翔於天空之際 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.133.55 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1420968086.A.642.html ※ 編輯: LouisFFs (1.172.133.55), 01/11/2015 18:01:06 ※ 編輯: LouisFFs (1.172.133.55), 01/11/2015 18:07:29
narukaze: 你的形態是char 但你要計算數字 所以需要減去'0'(0x30) 01/11 18:23
narukaze: 相減的結果才會是你要的0~9 01/11 18:24
narukaze: 可以查查ASCII, 或是printf("%x", '0'); 01/11 18:26
bibo9901: 原po的問題應該是為什麼字串要用 '\0' 結尾 01/11 18:26
osnq: 問題是,這樣的寫法也太奇怪了吧,可讀性也不好 01/11 18:27
bibo9901: 這是因為C規定 "字串" = "用\0結尾的char array" 01/11 18:28
narukaze: 啊 好像是耶 看錯了XD 01/11 18:28
回覆:謝謝大大回答!!我知道字串後面有\0,也知道為何要-'0'但是不了解為何以下這樣 才給過ex:char id[11];id[10] = '\0'; 而我單純宣告char id[10];不能過,我在其他程式碼不用用上面那個方法宣告也沒有錯誤 ※ 編輯: LouisFFs (1.172.133.55), 01/11/2015 18:53:01
narukaze: 你要總共需要11個字元的空間來存 包含身分證的10碼+'\0' 01/11 19:18
narukaze: 至於 id[10] = '\0'; 可以不用加 01/11 19:19
narukaze: 應該說 上面那行可以省略 01/11 19:20
LouisFFs: 謝謝!! 我忘記我的空間不夠了哈哈 01/11 20:04
Killercat: erh, 拜託,這個用迴圈好嗎 XD 不要硬code 9876543... 01/11 20:17
Killercat: 他是一個總長度為10的char array 01/11 20:19
LouisFFs: 哈哈哈~小弟新手 一想到有公式就直接帶進去哈哈 01/11 23:29
MOONRAKER: 你去超市會說 小姐你好 我要買那一手啤酒的第五瓶嗎 01/12 17:45
uranusjr: 我只知道我去書店都會拿從上面數來第三本 01/13 11:31