2011-06-16 107 views
1

我有下面的代碼:函數getline問題

system("CLS"); 
string title; 
string content; 
cout << "Get title." << endl; 
getline(cin,title); 
cout << "Get content." << endl; 
getline(cin,content); 

的問題是 - 應用程序沒有問絲毫不差,我有拿到冠軍,獲得的內容,然後等待用戶輸入,這不是等待用戶輸入後得到title.b我必須添加任何break或smth?
或者,也許,這不是從用戶輸入中讀取全文的最好方法嗎?

+0

爲什麼不輕易寫'cin >> title'? – 2011-06-16 21:21:19

+1

@Mr。 TAMER如果標題中有一個空格,則執行'cin >>'只會將字符加到空格中。 – jonsca 2011-06-16 21:23:42

+3

你好,歡迎來到Stack Overflow。感謝您發佈代碼,以便我們可以看到您正在談論的內容。將來,在發佈代碼時,請考慮將您的程序降至最小**完整**示例,以說明您的問題。在這種情況下,我擔心你排除了對回答你的問題至關重要的信息。有關如何以及爲什麼要發佈完整程序的更多信息,請參閱http://sscce.org。 getline(cin,title)之前忽略 – 2011-06-16 21:26:18

回答

3

如果您在撥打system()之前撥打cin >> something;

例如,將輸入轉換爲整數。當cin >> myintvar;(或類似)時,整數被放置在myintvar中,'\ n'在流中被髮送。 getline選取\n作爲指示輸入行結束的指示,因此它被有效「跳過」。

要麼改變cin >>getline() 或致電cin.ignore()抓住'\n'(或更好的,叫cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');刷新輸入buffer--但可以肯定你沒有在這個過程中丟掉了寶貴的投入)。

+0

;作品,謝謝! – erkses 2011-06-16 21:34:46

+0

@erkses沒問題。你會再次遇到這個問題,所以請注意:) – jonsca 2011-06-16 21:35:44

2

我敢打賭,你有類似於選擇選項(作爲數字類型)的菜單,然後嘗試讀取這些行。

這是因爲性病後:: CIN讀了一些值的剩餘「\ n」的尚未處理,該解決方案將包括#include <limits>,然後把std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); 之前你getline(cin,title);

0

這是因爲當你使用getline()會忽略行尾的換行符,並將其輸入到輸入隊列中,所以當下一次調用getline函數時,它會遇到前一個getline()丟棄的換行符,因此它認爲結束你的輸入字符串。所以這就是爲什麼它不會從你那裏收到任何意見。你可以用這樣的東西

getline(cin,title); 
cin.get(); 

希望這個工程。

+0

不,getline讀取整行並丟棄換行符。這裏的問題是別的。 – 2011-07-14 18:57:14