2012-09-27 56 views
-1

可能重複的工作:
Need help with getline()getline函數的不與多個字符串輸入

我試圖使用getline函數與CIN一起從鍵盤獲取輸入,但我代碼跳過getline語句,而是轉到下面的cin函數。這是我的代碼和正在發生的事情的截圖。

enter image description here

void addmovie(ofstream& MovieContentsFile) { 

string movieTitle; 
int movieQuantity; 

cout << " \n Add Movie Selected \n " << endl; 

cout << "Please type in the movie title and press enter \n" << endl; 

getline(cin,movieTitle, '\n'); 

cout << "Movie: " << movieTitle << "Please type in the amount of copies we have of this movie \n " << endl; 

cin >> movieQuantity; 

我會很感激爲什麼發生這種情況的解釋和如何避免它在未來

回答

3

cin >> something樹葉在緩衝區結尾的換行,這會被忽略下一個cin >> something_else(推測這是你如何閱讀菜單選項)。但是,getline獲取的所有內容直到幷包括緩衝區中的下一個換行符,而不忽略空格。即在這種情況下它什麼都沒有(好吧,只是換行符)。

通常最好不要混用兩者,它可能會變得凌亂。

編輯:爲了澄清,getline將從緩衝區中刪除最後一個換行符,但不會將它存儲在您的string中。

+0

我使用了switch case語句來進行菜單選擇,僅供您參考。所以你會建議嚴格使用以太網getline或cin? –

+0

'switch' /'case'對於選擇一個基於輸入的函數來說是很好的選擇,但與您實際得到輸入的方式無關。一般來說,只要使用'>>'和'getline'中的一個,而不是兩個都是最好的選擇。同時處理兩者是一件痛苦的事情。 – BoBTFish

0

這是因爲換行符仍然在緩衝區中,所以當它到達getline時它會看到它並跳過它。爲了避免這種情況,你可以在之前的行上放置類似cin.ignore(25, "\n")的東西。這將忽略25個字符,直到它到達換行符,然後它也會這樣。