關於scanf內部執行方式的猜測

2021-07-25 11:53:05 字數 1003 閱讀 1117

關於scanf內部執行方式的猜測

大家都會用scanf,利用它輸入一些資料都是沒問題的,但是不知道你們在運用的時候是否出現過一些比較煩的問題?大家腦子中是否有快取區這個概念?

首先,我先來說下scanf的執行機制。

第乙個條件就是需要程式中要有scanf這條語句。第二個條件是scanf裡面要求使用者輸入資料。假如程式中有這麼一條語句 scanf(「」); 。那這條語句是起不到讓使用者輸入內容的效果的。需要有 %d 或者 %c 等。然後程式就會等待使用者輸入一些東西,這個時候,你輸入多少內容都是可以的,只要不按下回車鍵,你就可以一直輸入。你在螢幕上面輸入的內容都到哪去了呢?這個時候就要有快取區這個概念了。顧名思義,它就是起到乙個臨時快取的作用而已,將你在螢幕上輸入的內容暫時儲存到這個地方,當你結束輸入後(當你按下回車鍵時,他就認為你想結束輸入了)。系統就會自動按照程式中scanf裡面%d%c%f等這些資料的排列順序,依次放到對應變數的儲存空間裡,如果輸入不足,則仍然需要繼續輸入,如果輸入過多,多餘的內容仍然會儲存在快取區中。也就是說,如果有下面一條語句。

scanf(「%d%f%c」, &a, &b, &c);

你輸入的內容是 123 3.5 d

然後,按照我們一貫的理解 a=123,b=3.5,c = 『d』

但是實際卻並不是這樣的,實際的c中存放的是空格。因為空格包括回車都是被算作字元的,都可以用char型的字元變數來接收。

最後,我再補充幾條scanf的使用小規則吧,編譯不能檢查出來的。

1、普通變數前缺少了 &。

2、在進行輸入時,一定要嚴格按照程式中的規定輸入,%d%f就輸入數字,%c就輸入字元,%s就輸入字串。其他用於間隔的字元一定要嚴格按照順序輸入,用逗號(,)間隔,就輸入逗號,用空格( )間隔,就輸入空格。沒有間隔的情況見下一條。

3、如果在scanf的引號中的%格式符都沒有規定間隔,那麼數字與數字之間的預設間隔就是空格。因為需要區分兩個數字。數字與字元的話,在數字的前乙個字元或後乙個字元即會被讀取。

4、在輸入字串時,只能以回車鍵結束。

關於unittest的執行方式

unittest 有兩種執行方式,1是在unittest 執行,2不在unittest執行 在unittest模式下,執行測試方法跟下面的呼叫語句沒有關係 不在unittest下,執行的測試方法跟下面的you呼叫語句有關係 eg1 第一種是在主函式下通過例項化類然後呼叫。if name main t...

關於scanf的疑問

scanf函式是從標準輸入流 stdin 讀取資料,按照格式說明引數,將資料寫入引數位址所在空間,標準輸入流預設的是鍵盤輸入流,但是,由於作業系統的緩衝區管理機制,從鍵盤上輸入的資料不是直接被scanf函式讀取的,而是暫存在記憶體緩衝區,只有遇到回車鍵的時候,scanf函式才會開始工作,並且,最後輸...

關於Scanf函式的使用!

這裡講一下我自己在程式設計過程中的例子 2.截圖太麻煩,直接打程式了 應當注意的是 如果在 格式控制字串 中除了格式宣告外還有其他字元,那麼需在輸入資料時對應的位置上字元要保持一致 例如scanf a f,b d n a,b 則需輸入a 1,b 2 而不是直接輸入1 2,會導致錯位結果不理想 3.當...