[英]What is difference between cin, cin.get(address,size) and cin.getline(address,size)
[英]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.