查看單個文章
  #10  
舊 2014-02-22, 01:37 AM
a40136 a40136 目前離線
進階會員
 
註冊日期: 2007-07-01
文章: 261
預設

引用:
作者: 哈啦 查看文章
了解,剛才我再測試一下我的寫法,果然在某些情況下會出錯。例如我輸入1000000就會當掉,或者輸入a or ccc or g等非數字,結果全得到zero的結果。

而書上的範例則只容許0 to 9,沒有機會讓你打出10以上的數字,若打非數字則不顯示結果,但依然return 0,不會當掉。

看來我還是得再研究一下書本範例的邏輯推演,依我自己的直覺的邏輯推出來的確實有誤。十分感謝。

但拿使用者輸出去減 '0',這一點我還是搞不懂why doing so?
char 存0 是存48,存1是49,所以拿 '1'(這裡是字元)-'0' = 49-48 = 1

ASCII對照表如下請參考


另外要注意您宣告的interger沒特別註記的話會 signed interger
界線通常是-32767~32767,所以輸入1000000當然會當掉,是
很合理的,再來您輸入非數字卻存入int這是"非常"危險的事情,會
造成overflow,有機會會多寫入幾個byte汙染到連續記憶體區段
後面的空間(這是undefined behavior看各compiler如何處理)。

此篇文章於 2014-02-22 01:47 AM 被 a40136 編輯。
回覆時引用此篇文章