關於計算機中的數據存儲與顯示

存儲:

計算機中的數據總體來說分爲兩類:數值和字符。
1. 對於數值的存儲,計算機用該數值對應的二進制進行表示(一般爲補碼)。
2. 對於字符等非數值的文字和其他符號進行處理時,要對文字和符號進行數字化,即用二進制編碼來表示文字和符號。其最常用到的編碼方案有ASCII編碼和EBCDIC編碼。

顯示:

由鍵盤等外設輸入到計算機中的數據用ASCII碼進行表示。

scanf()函數的原理

想象輸入設備(鍵盤)連接着一個叫“緩衝”的東西,把緩衝認爲是一個字符數組。
當你的程序執行到scanf時,會從你的緩衝區讀東西,如果緩衝區是空的,就阻塞住,等待你從鍵盤輸入。
現在假設你的緩衝區裏有:abcd\n1234\n  (其中\n是回車符)執行:scanf("%s",name);的時候,由於scanf是讀數據直到看見空白符(空白符:指空格符、製表符、回車符)就停止的輸入函數。所以執行後,把abcd存到了name中。緩衝區於是變成了 : \n1234\n
接下來的執行就有問題了,如果遇到了:scanf("%d",&number);怎麼辦?因爲遇到了回車符,它並不是一個數字,所以scanf還有一個特性,就是忽略先導的空白符。不管是有幾百個回車也好,幾萬個空格也罷,只要它們連續地出現在緩衝區的開頭,就統統忽略他們。然後再讀有意義的字符。於是1234被讀入number。
回到剛剛,當緩衝區還是:\n1234\n的時候,如果遇到了:scanf("%c",&sex);應該怎麼辦呢?你說,那好辦呀,不是說了忽略前導空白符嗎?跳過回車讀'1'呀!想法是好的,可這隻針對你的程序這一種情況。如果我編寫的程序就是統計用戶輸入了多少個回車呢?所以對scanf來講跳過前導空白符有個例外,當參數是%c的時候,就把緩衝區的第一個字符返回回去,不管是什麼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章