1. 程式人生 > >C++中關於get()和getline()函式讀取行的問題

C++中關於get()和getline()函式讀取行的問題

1. 面向行的輸入:getline()

  getline()函式讀取整行(讀取格式為cin.getline()),它使用通過回車鍵輸入的換行符來確定輸入結尾。該函式有兩個引數,第一個引數是用來儲存輸入行的陣列名稱,第二個引數是要讀取的字元數。getline()函式在讀取指定書目的字元或遇到換行符時停止讀取。並且該函式不保留最後的換行符。

2.面向行的輸入:get()

  get()成員函式有多個變體,其中有一個變體與 getline()函式基本類似,也是有兩個引數,不同的是該函式會保留最後的換行符,這樣的話,當下次再繼續使用cin.get(param1,param2)來讀取下一行資料時,首先遇到的是上次保留下來的換行符,所以為了消除最後保留的換行符的影響,我們需要使用get()函式的另一種變體,get()函式,即沒有引數。
  cin.get(param1,param2)
  cin.get()
  cin.get(param1,param2)
  第二行的cin.get()函式的作用就是讀取第一次保留下來的換行符,這樣就解決了第二次讀取遇到換行符的影響了。

3.空行和其他問題

  當getline()或get()讀取空行時,最初的做法是,嚇一跳輸入語句將在前一條getline()或get()結束讀取的位置開始讀取;但當前的做法是,當get()(不是getline())讀取空行後將設定失效位,這意味著接下來的輸入將被阻斷,但可以用下面的命令來恢復輸入:
  cin.clear()