日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

清理cin输入缓冲区_输入缓冲区究竟有啥秘密?

發布時間:2024/4/18 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清理cin输入缓冲区_输入缓冲区究竟有啥秘密? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小豆丁:老張!老張!江湖救急啊!

老張:咋啦,火急火燎的?

小豆丁:我寫了個程序,我敢對天發誓,代碼絕對沒有問題,但是!運行結果就是和預期不一樣,我不知道哪里出了問題!你快給我看看吧!

老張:把你代碼給我瞧瞧!

小豆丁:就這個代碼!你看!

老張:代碼語法上確實沒問題,是不是程序運行起來之后,給整數類型變量num賦值后還沒來得及給字符類型變量ch賦值,程序就結束了?

小豆丁:嗯吶,是這樣!

老張:產生這個問題的原因并不是源自于代碼,而是和輸入緩沖區有關。

小豆丁:啥是輸入緩沖區啊?

老張:我們在程序中通過scanf函數,對變量進行賦值,數據的傳遞過程你還記得吧?

小豆丁:記得啊,通過標準輸入設備也就是鍵盤進行數據的輸入,然后傳遞到我們程序中的變量進行存儲。

老張:其實這個過程并不全面,當從鍵盤獲取數據后,并不是直接把數據存入程序中變量里的,而是經過了一個叫做輸入緩沖區的地方。

小豆丁:輸入緩沖區?

老張:鍵盤輸入的數據先存放到輸入緩沖區中,然后再從輸入緩沖區里讀取到程序的變量中。

小豆丁:那為啥經過過了這個緩沖區之后,我的程序就出問題了呢?

老張:我們來分析下這個過程,首先當你在給第一個整形變量num賦值的時候,你在鍵盤上都輸入啥?

小豆丁:我想給變量num賦值18,所以我在鍵盤上敲了18這個數字啊!

老張:沒有別的了嗎?

小豆丁:沒了啊,我只敲了18這個數字啊?

老張:那你輸入18這個數字之后,你是不是還敲了回車鍵啊!

小豆丁:肯定的啊,不敲回車鍵,程序沒辦法繼續運行啊。

老張:問題就在這,通過鍵盤放入輸入緩沖區里的數據,不僅僅是你想要的18,還有你按下的回車!

小豆丁:回車也會放到輸入緩沖區?它也不是個數字啊?

老張:沒錯,回車確實不是數字,但是當你敲擊回車后,在輸入緩沖區中會多存放一個''字符,也就是我們平時所說的換行字符。

老張:之后,你的18從緩沖區被拿走,存儲到程序中的整形變量num中,而''字符卻還留在輸入緩沖區中。

小豆丁:哦,我好像明白了!因為緩沖區中還殘留著這個''字符,所以接下來該給字符類型變量ch賦值時,直接將緩沖區里的''字符拿走賦值給字符變量ch了。是這個意思嗎?

老張:沒錯,因為''換行字符并不會被整數類型變量num所接收,所以它會留在緩沖區中,而接下來要被賦值的變量ch是字符類型的,剛好可以存儲''字符,所以還沒等你通過鍵盤去賦值,''字符就直接被拿到了ch變量中,程序也就結束了,也就意味著,變臉ch實際存儲的是''字符。

小豆丁:嗯嗯,我明白了,那這個問題該怎么解決呢?

老張:其實也簡單,只要你把緩沖區里的''換行字符清理到就行了唄。

小豆丁:怎么清理,快教教我。

老張:你可以在程序中添加這兩行代碼,完成輸入緩沖區的清理工作。

小豆丁:哈哈,那我趕緊去試試,看這次結果是不是正常的!

老張:喜歡老張的文章的話,就關注我吧,每天分享一個小知識!

總結

以上是生活随笔為你收集整理的清理cin输入缓冲区_输入缓冲区究竟有啥秘密?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。