簡體   English   中英

cin.get() 和 cin.getline() 的區別

[英]difference between cin.get() and cin.getline()

剛接觸編程,對C++中的get()getline()函數有一些疑問。

我對這兩個功能的理解:

getline() function 讀取一整行,並使用回車鍵傳遞的換行符來標記輸入結束。 get() function 與getline()非常相似,但不是讀取並丟棄換行符, get()將該字符留在輸入隊列中。

我正在閱讀的書(C++ Primer Plus)建議使用get()而不是getline() 我的困惑是getline()並不比get() ) 更安全,因為它確保以'\n'結束行。 另一方面, get()只會將字符掛在輸入隊列中,從而可能導致問題?

有相同數量的優點和缺點,並且 - 基本上 - 都取決於您正在閱讀的內容: get()將分隔符留在隊列中,從而使您能夠將其視為下一個輸入的一部分。 getline()丟棄它,所以下一個輸入就在它之后。

如果您正在談論控制台輸入中的換行符,則丟棄它是非常有意義的,但如果我們考慮來自文件的輸入,您可以使用“分隔符”作為下一個字段的開頭。

什么是“好”或“安全”,取決於你在做什么。

get()從流中提取char並返回其值(轉換為整數),而getline()用於逐行從文件中獲取一行。 通常,getline用於過濾掉具有平面文件(具有數千行)的應用程序中的分隔符,並希望使用某個分隔符提取輸出(逐行),然后對其執行某些操作。

cin.getline()將輸入讀取到'\\ n'並停止

cin.get()將輸入讀取到'\\ n'並在流中保留'\\ n'

例如 :

char str1[100];
char str2[100];
cin.getline(str1 , 100);
cin.get(str2 , 100);
cout << str1 << " "<<str2;

輸入:
1 2
3 4
輸出1 2 3 4 //輸出已排除

扭轉它們時
例如 :

char str1[100];
char str2[100];
cin.get(str2 , 100);
cin.getline(str1 , 100);
cout << str1 << " "<<str2;

輸入:
1 2
3 4
輸出1 2 //輸出未激活,因為cin.getline()讀取'\\ n'

get() 和 getline() 函數之間的區別在於 getline() function 提取定界字符但不將其放入字符串中。 而 get() function 不從輸入緩沖區中提取分隔符

cin.get()接受整行的輸入,其中包括行尾空格的重復,它將消耗下一整行,但getline()用於逐行從文件中獲取一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM