清理cin输入缓冲区_输入缓冲区究竟有啥秘密?
小豆丁:老張!老張!江湖救急啊!
老張:咋啦,火急火燎的?
小豆丁:我寫了個程序,我敢對天發誓,代碼絕對沒有問題,但是!運行結果就是和預期不一樣,我不知道哪里出了問題!你快給我看看吧!
老張:把你代碼給我瞧瞧!
小豆丁:就這個代碼!你看!
老張:代碼語法上確實沒問題,是不是程序運行起來之后,給整數類型變量num賦值后還沒來得及給字符類型變量ch賦值,程序就結束了?
小豆丁:嗯吶,是這樣!
老張:產生這個問題的原因并不是源自于代碼,而是和輸入緩沖區有關。
小豆丁:啥是輸入緩沖區啊?
老張:我們在程序中通過scanf函數,對變量進行賦值,數據的傳遞過程你還記得吧?
小豆丁:記得啊,通過標準輸入設備也就是鍵盤進行數據的輸入,然后傳遞到我們程序中的變量進行存儲。
老張:其實這個過程并不全面,當從鍵盤獲取數據后,并不是直接把數據存入程序中變量里的,而是經過了一個叫做輸入緩沖區的地方。
小豆丁:輸入緩沖區?
老張:鍵盤輸入的數據先存放到輸入緩沖區中,然后再從輸入緩沖區里讀取到程序的變量中。
小豆丁:那為啥經過過了這個緩沖區之后,我的程序就出問題了呢?
老張:我們來分析下這個過程,首先當你在給第一個整形變量num賦值的時候,你在鍵盤上都輸入啥?
小豆丁:我想給變量num賦值18,所以我在鍵盤上敲了18這個數字啊!
老張:沒有別的了嗎?
小豆丁:沒了啊,我只敲了18這個數字啊?
老張:那你輸入18這個數字之后,你是不是還敲了回車鍵啊!
小豆丁:肯定的啊,不敲回車鍵,程序沒辦法繼續運行啊。
老張:問題就在這,通過鍵盤放入輸入緩沖區里的數據,不僅僅是你想要的18,還有你按下的回車!
小豆丁:回車也會放到輸入緩沖區?它也不是個數字啊?
老張:沒錯,回車確實不是數字,但是當你敲擊回車后,在輸入緩沖區中會多存放一個''字符,也就是我們平時所說的換行字符。
老張:之后,你的18從緩沖區被拿走,存儲到程序中的整形變量num中,而''字符卻還留在輸入緩沖區中。
小豆丁:哦,我好像明白了!因為緩沖區中還殘留著這個''字符,所以接下來該給字符類型變量ch賦值時,直接將緩沖區里的''字符拿走賦值給字符變量ch了。是這個意思嗎?
老張:沒錯,因為''換行字符并不會被整數類型變量num所接收,所以它會留在緩沖區中,而接下來要被賦值的變量ch是字符類型的,剛好可以存儲''字符,所以還沒等你通過鍵盤去賦值,''字符就直接被拿到了ch變量中,程序也就結束了,也就意味著,變臉ch實際存儲的是''字符。
小豆丁:嗯嗯,我明白了,那這個問題該怎么解決呢?
老張:其實也簡單,只要你把緩沖區里的''換行字符清理到就行了唄。
小豆丁:怎么清理,快教教我。
老張:你可以在程序中添加這兩行代碼,完成輸入緩沖區的清理工作。
小豆丁:哈哈,那我趕緊去試試,看這次結果是不是正常的!
老張:喜歡老張的文章的話,就關注我吧,每天分享一個小知識!
總結
以上是生活随笔為你收集整理的清理cin输入缓冲区_输入缓冲区究竟有啥秘密?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7添加静态路由 hat red_两个不同
- 下一篇: 实例手册_独家数据 | 1820Fall