2011-01-29 68 views
0
cin >> Input; { 
if(Input == "a") 
    Position = "first"; 
else if(Input == "b") 
    Position = "second"; 
else if (Input == "c") 
    Position = "third"; 
else if(Input == "Stop") 
    break; 
} 

cin >> Input我有兩個cin部分。出於某種原因,它跳過了Name的getline。我cin後>>輸入它顯示名稱:狀態:然後執行狀態的getline。基本cout/cin問題

cout << "Name: "; 
    getline(cin, Name); 
    if(Name == "Stop") 
    break; 

cout << "Status: "; 
    getline(cin, Status); 
    if(Status == "Stop") 
    break; 
+0

你爲什麼休息一下?我想你可能需要更完整的代碼來理解如何回答這個問題。 另外,是名稱和狀態等字符串或字符數組?你已經留下了很多問題來猜測。 – dcousens 2011-01-29 21:14:01

+0

名稱和狀態是字符串。休息是退出while循環。 – bob 2011-01-29 21:27:42

回答

1

我想應該是這樣的:

cin.getline(whatever); 
cin.ignore(1, '\n'); 

看,當你讀過從標準輸入一些文本字符串末尾被確定\n(默認)。當你在控制檯窗口中點擊Return時,這個符號會被跳過,但它是存在的。因此,當您嘗試讀取下一個字符串時,它會先前遇到忘記\n並終止讀取返回空字符串。詳細信息請參閱this

+0

這裏沒有必要忽略,`getline`讀取'\ n'。 – 2011-01-29 21:34:01

1

的問題是,大部分的輸入操作將在輸入緩衝區離開換行符(但不是getline()),更多信息是here
在你的情況下,該行:

cin >> Input; { 

將離開/n身後,這就是後來喂到:

getline(cin, Name); 

快速的解決方案:

更換cin >> Input;getline(cin, Input);

1

cin >> somevar葉在換行符後面。不管somevar是什麼類型,即使它是std :: string,行字符的結尾也不會被該語句讀取。因此,當您到達名稱部分時,您會看到somevar行的結尾,該行顯然爲空。在試圖讀取名稱之前拋出一個getline,它應該沒問題。