2011-05-10 35 views
0

可能重複:
Need help with getline()爲什麼getline不會導致我預期的文本?

在下面的代碼,我的函數getline完全跳過,不會提示輸入。

#include <cstdlib> 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <istream> 

using namespace std; 

int main() 
{ 
    int UserTicket[8]; 
    int WinningNums[8]; 
    char options; 
    string userName; 

    cout << "LITTLETON CITY LOTTO MODEL: " << endl; 
    cout << "---------------------------" << endl; 
    cout << "1) Play Lotto " << endl; 
    cout << "q) Quit Program " << endl; 
    cout << "Please make a selection: " << endl; 

    cin >> options; 

    switch (options) 
    { 
    case 'q': 
     return 0; 
     break; 

    case '1': 
     { 
      cout << "Please enter your name please: " << endl; 
      getline(cin, userName); 
      cout << userName; 
     } 
     cin.get(); 
     return 0; 
    } 
} 
+1

它是如何不工作?在什麼條件下?運行時錯誤?編譯器錯誤?你想做什麼?你能把它結晶到一個更小的例子嗎? – 2011-05-10 16:55:58

+0

不錯的方式讓人們開始思考... – 2011-05-10 16:56:27

+2

也,這功課?如果是這樣,它應該被貼上標籤。 – 2011-05-10 16:56:40

回答

9

的問題是在這裏:

cin >> options; 

只能從cin提取物(>>),當用戶點擊進入。因此,用戶鍵入 輸入並執行該行。由於optionschar,它從cin中提取單個字符(1)並將其存儲在options中。 輸入仍然在stdin緩衝區中,因爲還沒有消耗它。當你進入getline調用時,它在緩衝區中看到的第一件事是輸入,這標誌着輸入的結束,因此getline立即返回一個空字符串。

有很多方法可以解決它;可能是你正在使用你的程序的模型擬合的最簡單的方法就是告訴cin忽略下一個字符的緩衝區:

cin >> options; 
cin.ignore(); 
+0

謝謝,我忘了把cin.ignore(); – 2011-05-10 17:03:33

+0

+1按鈕。我以前從未見過。 – 2011-05-10 17:27:09

相關問題