天天看點

linux getline函數用法,get()與getline()

以下内容來自: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()還會設定失效位,并關閉後面的輸入。