2011-03-14 89 views
0

我想指出我不擅長C++,我通常使用C,但我認爲了解一些C++基本會很好,所以我需要發送數據到服務器和正常的std :: cin >>變量不能這樣做,因爲它只能讀取到空間,讓我讀到函數getline和它的工作很好,但是當我在無限循環中做一些liek此:C++ Getline簡單錯誤

for (;;) 
{ 
std::cout << "Hello" << std::endl;; 
std::getline(std::cin,darek.wiadomosc); 
} 

德寧第一itteration它在屏幕上顯示雙你好: 你好 你好 正在輸入的字符串

但是在一個循環它顯示了一切都很好。這是與getline問題,我敢肯定,因爲當我將它改爲std :: cin >>只是爲了測試它的工作。任何人都可以回答我的簡單問題嗎?

+0

你想做什麼?你不應該對有一個無限循環感到驚訝:你使用'for(;;)'並且沒有中斷。無論如何,你可能想查看一本[介紹性的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),以便你可以正確地學習語言;您的C語言知識僅對C++ * syntax *的一小部分有用,對於慣用和正確的C++編碼可能根本無用。 – GManNickG 2011-03-14 21:07:38

+0

我知道thre不是中斷......我只是想用它來測試我知道如何處理循環中斷,這不是主題。 – Darek 2011-03-14 21:08:17

+0

你使用什麼編譯器和操作系統?這在Windows和Visual C++中工作正常(在開始時只打印一個Hello)。問題可能是您的OS /運行環境在運行程序時不會清除標準輸入,從而使第一個getline立即返回。沒有更多的信息,我不能肯定地說。 – 2011-03-14 21:08:48

回答

3

std::cin在流中留下終止符(無論是空格還是換行符)。 所以,如果你這樣做:

std::string foo, bar; 
std::cin >> foo; 
std::getline(std::cin, bar); 

與輸入爲:

Hello 
World 

bar將結束與空字符串,而不是「世界」,因爲getline將停在第一個換行符,這是一個在「你好」之後。

爲了回到您的問題,如果在循環開始之前您有std::cin >>的實例,您可能會有一個雜散的換行符,使第一次迭代以意想不到的方式運行。您可以使用std::cin.ignore來忽略流中留下的任何換行符。

+0

是的我有一個std :: cin before循環。我會看看。工作,道具和感謝:D – Darek 2011-03-14 21:13:05