引用:
作者: 哈啦
了解,剛才我再測試一下我的寫法,果然在某些情況下會出錯。例如我輸入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如何處理)。