以下内容來自:http://yanger2004.ycool.com/post.2831191.html
相同點:
要擷取一行的輸入,标準流類的成員函數getline(),get()都有三個參數,比如getline(char*line,int size,char ='/n')。其中第一個參數指向存儲結果字元的緩沖區指針,第二個表示緩沖區大小(本次讀取的最大字元個數,不能夠超過其限度),第三個表示知道什麼時候停止讀輸入的終止符(讀取一行結束的标志)。終止符有一個經常用到的預設值"/n"。兩個函數遇到輸入終止符時,都把零儲存在結果緩沖區裡。
不同點:
2.在處理字元串時,get()遇到輸入流的分隔符時就停止,而不從輸入流中提取分隔符。比如用cin.get(myarray1,30,'*');處理字元串1111*2222,碰到*就停止。cout<
以下内容來自
istream中的類提供了一些面向行的類成員函數;getline()和get()。這兩個函數都讀取一行輸入,直到到達換行符。然而,随後getline()将丢棄換行符,而get()将換行符保留在輸入序列中。
getline()程式舉例
#include
using namespace std;
const int ArSize = 20;
int main()
{
char name[ArSize];
char dessert[ArSize];
cout<
cin.getline(name,ArSize);
cout<
cin.getline(dessert,ArSize);
cout<
cout<
return 0;
}
在使用 get()時應該注意 get()是将換行符保留在輸入序列中,假使我們連續兩次調用get()那麼第二次調用時看到的第一個字元便是換行符。是以get()認為已到達行尾,而沒有發現任何可讀取的内容。我們可以使用不帶任何參數的cin.get()調用來讀取下一個字元,為讀取下一行輸入做好準備。
cin.get(name,ArSize);
cin.get();
cin.get(dessert,ArSize);
另外一種使用get()的方式是将兩個類成員函數拼接起來;
cin.get(name,ArSize).get();
程式例子
#include
using namespace std;
const int ArSize = 20;
int main()
{
char name[ArSize];
char dessert[ArSize];
cout<
cin.get(name,ArSize).get();
cout<
cin.get(dessert,ArSize).get();
cout<
cout<
return 0;
}
當getline()和get()讀取空行時;
get()讀取空行後會将設定失效位。這意味接下來的輸入将被阻斷;但可以使用下面的指令來恢複輸入
cin.clear();
另一個潛在的問題,輸入字元串可能比配置設定的空間長。如果輸入行包含的字元數比指定的多,則getline()和get()将把餘下的字元留在輸入隊列中,而getline()還會設定失效位,并關閉後面的輸入。