[問題] C關於字串轉數字計算

看板C_and_CPP作者 (願翱翔)時間11年前 (2015/01/11 17:21), 11年前編輯推噓2(2014)
留言16則, 7人參與, 最新討論串1/1
開發平台(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

01/11 18:23, , 1F
你的形態是char 但你要計算數字 所以需要減去'0'(0x30)
01/11 18:23, 1F

01/11 18:24, , 2F
相減的結果才會是你要的0~9
01/11 18:24, 2F

01/11 18:26, , 3F
可以查查ASCII, 或是printf("%x", '0');
01/11 18:26, 3F

01/11 18:26, , 4F
原po的問題應該是為什麼字串要用 '\0' 結尾
01/11 18:26, 4F

01/11 18:27, , 5F
問題是,這樣的寫法也太奇怪了吧,可讀性也不好
01/11 18:27, 5F

01/11 18:28, , 6F
這是因為C規定 "字串" = "用\0結尾的char array"
01/11 18:28, 6F

01/11 18:28, , 7F
啊 好像是耶 看錯了XD
01/11 18:28, 7F
回覆:謝謝大大回答!!我知道字串後面有\0,也知道為何要-'0'但是不了解為何以下這樣 才給過ex:char id[11];id[10] = '\0'; 而我單純宣告char id[10];不能過,我在其他程式碼不用用上面那個方法宣告也沒有錯誤 ※ 編輯: LouisFFs (1.172.133.55), 01/11/2015 18:53:01

01/11 19:18, , 8F
你要總共需要11個字元的空間來存 包含身分證的10碼+'\0'
01/11 19:18, 8F

01/11 19:19, , 9F
至於 id[10] = '\0'; 可以不用加
01/11 19:19, 9F

01/11 19:20, , 10F
應該說 上面那行可以省略
01/11 19:20, 10F

01/11 20:04, , 11F
謝謝!! 我忘記我的空間不夠了哈哈
01/11 20:04, 11F

01/11 20:17, , 12F
erh, 拜託,這個用迴圈好嗎 XD 不要硬code 9876543...
01/11 20:17, 12F

01/11 20:19, , 13F
他是一個總長度為10的char array
01/11 20:19, 13F

01/11 23:29, , 14F
哈哈哈~小弟新手 一想到有公式就直接帶進去哈哈
01/11 23:29, 14F

01/12 17:45, , 15F
你去超市會說 小姐你好 我要買那一手啤酒的第五瓶嗎
01/12 17:45, 15F

01/13 11:31, , 16F
我只知道我去書店都會拿從上面數來第三本
01/13 11:31, 16F
文章代碼(AID): #1Kia2MP2 (C_and_CPP)