您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關C語言中scanf讀取緩存區的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
首先我們要了解什么是 scanf 函數
根據 cplusplus.com的解釋
scanf()函數是通用 終端格式化輸入 函數,它從標準輸入設備(鍵盤)
讀取輸入的信息。可以讀入任何固有類型的數據并自動把數值變換成適當的機內格式。 其調用格式為:
scanf("<格式化字符串>",<地址表>);
并且注意:scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。
當進一步深挖之后(暫時不需要知道原理,只需要知道結果即可),
可以得到這樣一個認識:
鍵盤輸入的東西并沒有直接給scanf讀取 而是在緩沖區進行暫時存放
比如這樣一段代碼:
#include <stdio.h> int main() { int a, b, c, d, e; scanf("%d %d %d %d", &a, &b, &c, &d); printf("%d %d %d %d\n", a, b, c, d); scanf("%d", &e); printf("%d\n", e); return 0; }
預期:1 2 3 4
1 2 3 4
5
5
但是如果你這樣輸入: 1 2 3 4 5
會輸出 1 2 3 4
5
這是因為scanf以回車鍵為信號,去緩沖區進行讀取數據,只要數據的格式符合標準,那么就可以正確讀取,否則就要等待繼續輸入/讀取失敗
通過查閱網站我們知道了,scanf函數是標準輸入流(從鍵盤接收數據),接收的數據放入輸入緩沖區中,其中就包括在鍵盤輸入的空格、回車這類字符,
但是!!!
當你用%d接收時是不會影響的,但是用%c就會產生錯誤,這是因為在"%c"輸入時,空格和轉義字符均被視為有效字符會被%c接收。從而導致輸出錯誤,無法AC
1.List item
可以再%c前鍵入一個空格 (優解)
eg:scanf(" %c",&a);
這里 %c前面加上空格鍵 可以消除前面所有的空白字符(輸入的時候就會消化掉這個\n) 從而 不需要使用getchar()去吞\n
并且不會為下次留下空白字符的隱患
2.使用getchar()去吞掉緩存區中的\n
while(ch=getchar()!=EOF) getchar();
使用getchar(); 去吞掉緩存區中剩余的 ‘\n' ,從而使程序可以正常運行
感謝各位的閱讀!關于“C語言中scanf讀取緩存區的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。