![](/img/trans.png)
[英]Question on combination of >>, << operators & cin and cout objects
[英]Basic cout/cin question
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 >>輸入之后,我還有兩個cin部分。 由於某種原因,它會跳過Name的getline。 在我>>輸入后,它會顯示Name(名稱):Status(狀態):然后執行getline(狀態)操作。
cout << "Name: ";
getline(cin, Name);
if(Name == "Stop")
break;
cout << "Status: ";
getline(cin, Status);
if(Status == "Stop")
break;
我認為應該是這樣的:
cin.getline(whatever);
cin.ignore(1, '\n');
請參閱,當您從stdin中讀取了一些文本時,字符串結尾由\\n
確定(默認情況下)。 當您在控制台窗口中單擊“返回”時,將跳過該符號,但是該符號存在。 因此,當您嘗試讀取下一個字符串時,它會遇到先前被遺忘的 \\n
並終止讀取並返回一個空字符串。
閱讀這個詳細信息。
問題在於,大多數輸入操作會將換行符保留在輸入緩沖區中(而不是getline()
),更多信息在此處 。
在您的情況下,此行:
cin >> Input; {
將留下/n
后面的內容,該內容稍后將提供給:
getline(cin, Name);
快速解決方案:
替換cin >> Input;
與getline(cin, Input);
cin >> somevar
離開了換行符。 不管somevar
是什么類型,即使它是std :: string,該語句也不會讀取行字符的結尾。 因此,當到達名稱部分時,您將讀取somevar
行的行尾,該行顯然是空的。 在嘗試讀取名稱之前先扔一條getline,這應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.