本網站上有幾個問題涉及getline
無法正常工作,顯而易見的解決方案是緩衝區中還有需要清除的換行符,據推測與cin.ignore()
。我已經嘗試過這麼多的變化,沒有什麼似乎工作,所有我想要做的只是簡單的控制檯輸入和cin >> string
不是一個選項,因爲字符串可能有空格。getline(cin,string)不工作即使有cin.ignore()
這是我的代碼。
void prompt(std::string * str)
{
cout << "> ";
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
cin.ignore();
cin.ignore();
std::string tmp;
getline(cin, tmp);
cin.sync();
cin.get();
cin.ignore(256, '\r');
cin.ignore(256, '\n');
*str = tmp;
}
正如你所看到的我已經嘗試了各種各樣的東西。它仍跳過getline(cin,tmp)
,似乎將str
設置爲空字符串。請幫忙。感謝您的時間。
請不要標記C++與C標籤問題 – 2014-10-03 19:49:48
嘗試刪除所有'忽略()'命令,並使用'的std ::函數getline(給std :: cin> > std :: ws,tmp);'而是。 '>> std :: ws'跳過所有空格(包括行尾)。 – Galik 2014-10-03 19:50:30
我沒有看到任何錯誤檢查。做'if(!cin){cout <<「某事設置了失敗位。」 << endl; }' – 2014-10-03 20:34:24