關於C++中字串輸入get與getline的區別

小宇呵呵發表於2018-11-22

  最近使用C++中自己老是忘記的一個點,get與getline的區別。

1、get與getline

  get和getline所屬iostream類,作用是讀取一整行,通過換行符確定讀取結束,他們都可以讀取空格。

2、get與getline區別

  getline會在讀取結束後捨棄換行符,而get回將換行符保留到輸入序列中。

 

1 char arr[100];
2 cout<<"輸入一段文字:"<<endl;
3 cin.getline(arr,20);             //使用getline
4 cin.get(arr,20);                 //使用get
5  

get與getline有兩個引數,第一個引數是用來儲存的陣列名稱,第二個引數代表著讀取的位元組數。

輸入:asdfg 回車

get:只讀取asdfg不讀取回車,會導致下一個讀取輸入時第一個讀取“回車”。

getline:getline讀取asdfg回車,並將回車轉換為“ ”讀取,所以最終讀取的是“asdfg ”輸入序列中無回車,下一個讀取將會正常讀取。

3、如何解決get捨棄換行符而產生的影響

  在cin.get(arr,20)使用完後插入“cin.get()”,cin.get()不接受任何引數,為get()的一個變體,意義為讀取下一個字元(即使是換行符),用此程式碼來處理被捨棄的換行符。

即:

  cin.get(arr,20);

  cin.get();

  cin.get(arr,20);

  或者可以將兩段程式碼合為一段:

  cin.get(arr,20).get();

  以上。

參考資料:C++ primer plus

  

相關文章