getline 需要一次還是兩次回車

2021-06-16 18:26:24 字數 2064 閱讀 7648

---出現問題---

乙個getline和cin.geline這兩個函式的區別:

這兩個函式同時是儲存乙個句子,用getline函式時,當輸入乙個字串時,要敲兩下回車,這個語句才結束,而用cin.getline則不用:

#include

#include

using namespace std;

main ()

{string name; 

getline (cin, name);

cout <#include

#include

using namespace std;

main ()

{char name[100];

cin.getline (name , 100);

cout <---不同之處---

1.istream& getline( istream& is, string& s, char delimiter = '\n' );

2.cin.getline(string &,length,char delimiter = '\n' );

是兩個不同的函式;

乙個是屬於string;

乙個是屬於istream流;

---為什麼導致前面出現的問題---

getline和cin.get實際上都是3個引數的(最後乙個經常省略),我覺得這兩個函式的結果應該是一樣的,出現不同的結果的可能是函式引數寫的不完整導致的。因為第三個引數可以省略(系統會自動給出),所以我們不去注意它。我測試了一下,如果把引數補上,則2個函式的結果是一樣的。具體如下(這裡我們把'z'作為結束字元):

//程式1

#include

#include

using namespace std;

main ()

{string name; 

getline (cin,name,'z');

cout #include

#include

using namespace std;

main ()

{char name[100];

cin.getline (name , 100,'z');

cout 《下面是執行結果,其中前4行為輸入內容,後5行為輸入內容:

jkljkl jkljkl jkljkl

jkl jkljkl

jkljkl jkljkljkl jkljkl

jkljkljklz

jkljkl jkljkl jkljkl

jkl jkljkl

jkljkl jkljkljkl jkljkl

jkljkljkl

press any key to continue

可以看出,在我輸入結束字元'z',之前,輸入的字元、空格和回車全部都原樣輸出,兩者並沒有任何區別;

這樣一比較getline(cin,name)和帶結束引數的這個函式似乎更為接近(等待系統再次輸出乙個回車之後結束輸入,帶引數的是等待輸入結束符z結束輸入),這麼說getline的預設結束符可能是回車,而正是第二個結束符結束了輸入並輸出;但是,問題是,那第乙個回車怎麼不結束輸入呢?就getline(cin,name,'z')來說,如果我們輸入jklzjklz,那系統輸出必然是jkl,怎麼可能等第二個結束符呢!好我們測試一下,到底哪個回車才是真正的結束符:

輸入jkljkl[endter]之後,不執行cout,只是游標換行了;然後輸入abc[endter]

輸出為:jkljkl

把abc換成別的也是一樣的效果,這說明第一次回車的時候,輸入就結束了!第二個回車完全是多餘的!

實際上有很多人說這是vc的乙個bug,也有人說不是,但是也說不上它到底有什麼作用;

如果把getline的第二個回車理解為多餘的話,那麼這裡的getline(cin,name)和cin.getline(name,100)在功能上就一樣了;

另一點,getline()和cin.getline()其實並不只是可以輸入一行,也可以輸入一篇文章,只要設定恰當的結束符就可以了;我們平時不帶引數時就不能,因為預設的結束符是'\0'(注意並不是回車),當你回車的時候,系統認為你輸入完畢,自動會在句尾加上'\0',然後結束;

一次提交觸發兩次請求

我們公司的專案都是前後端分離的,上線幾個月以來,發現乙個很奇怪的問題,每次前端發起請求,通過瀏覽器的開發者工具都能看到在network下同乙個url有兩條請求,第一條請求的method為options,第二條請求的method才是真正的get或者post,並且,第一條請求無資料返回,第二條請求才會返...

一次跳轉和兩次跳轉

我們在做 jsp或者 servlet 跳轉時,經常用到一次跳轉和兩次跳轉,到底這兩者有什麼區別呢?下面是伺服器端的兩個 jsp頁面 test1.jsp request.setattribute username leno test2.jsp requestdispatcher rd request....

一次URL請求後台響應兩次

做專案時遇到乙個問題。現象是這樣的,我在頁面點按f5重新整理頁面,但是後台 卻響應了兩次,百思不得其解。然後我就試探性的去更改html的標籤裡面的東西,可是問題依舊。我一直在思索這個問題,到底是瀏覽器請求了一次後 的執行了兩次,還是產生了兩次請求?為了得到這個答案,我搜尋到httpwatch這個工具...