看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) #include<stdlib.h> #include<stdio.h> int main(void) { char *p,s[6]; int n=0; p=s; gets(p); while (*(p)!= '\0') { n=n*8+*p-'0'; //這一行看不懂.... p++; } printf("%d",n); system("pause"); } ======================================== 之前都是用power函數來解進制問題 不過看到這程式後覺得還蠻精簡的~只是關鍵的那一行不知道再做啥.... 再請指教囉~~感謝~~~ -- 阿嬤說:「人生不是得到,就是學到。」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.187.52.246
diabloevagto:你應該是*p-'0'這邊看不懂吧? 06/05 11:14
diabloevagto:因為他S是宣告成字元,所以要取得裡面存的數值要減去 06/05 11:15
diabloevagto:0這個字元代表的編碼。你可以查到'0'是48,2是50。 06/05 11:16
diabloevagto:50-48=2,這樣就可以把他從CHAR轉成INT 06/05 11:17
diabloevagto:前面那個n*8只是把他左移一位。 06/05 11:17
感謝回覆~~不過倒不是*p-'0'這部份看不懂 而是假使我輸入的是八進制的12,那麼*p不是先指到 「1」嗎??然後左移一位??? 另外這樣要怎麼達成相乘8的1次方、2次方、3次方的效果呢??? 可能我的觀念有問題~再請不吝指教了~感恩~ ※ 編輯: saka037 來自: 218.187.52.246 (06/05 12:22)