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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

getline读取不等待输入的问题

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getline读取不等待输入的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先cin >>,然后getline讀取時會發生一閃而過不等待輸入的情況,用fflush(stdin)清除輸入緩沖區也是如此,糾結半天終于在妹神指導下搞清楚

由于輸入一個數據后按了回車鍵,而getline沒有忽略換行符,直接將前面輸入的數字后面的換行符當作了輸入,導致沒有等待輸入的情況。

此時,需要在getline前面添加cin.ignore()用來清除以回車結束的輸入緩沖區的內容,消除上一次輸入對下一次輸入的影響。

而fflush(stdin)用來清楚輸入緩存,按說和ignore()作用應該相同,但是還是沒有等待輸入,后來搜索得知,只有部分編譯器支持此函數如vc6.0,而linux下的gcc不支持此功能,而我正用的linux下gcc。

程序的輸入都建有一個緩沖區,即輸入緩沖區。一次輸入過程是這樣的,當一次鍵盤輸入結束時(按enter鍵后,如果不按enter不會輸入緩存區)會將輸入的數據存入輸入緩沖區,而cin等函數直接從輸入緩沖區中取數據。正因為cin函數是直接從緩沖區取數據的,所以有時候當緩沖區中有殘留數據時,cin函數會直接取得這些殘留數據而不會請求鍵盤輸入。此點需要注意。

cin.clear()重置錯誤標志位,一般用于輸入出錯時清空錯誤標志,以便進行下次輸入。比如當輸入一個數字

int n; while(1){cin >> n;if(cin.fail()){cout << "invalid input" << endl;cin.clear();cin.ignore(1024);cout << "please try again!" << endl;}break; } 此時輸入了一個字符,此時會設置錯誤標志,檢查cin.fail()是否輸入正確,如果輸入錯誤,首先要清空標志位,不然ignore時會首先判斷標志位,如果有錯誤標志則不進行忽略操作,注意順序。



總結

以上是生活随笔為你收集整理的getline读取不等待输入的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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