我使用蘋果LLVM 3.0,顯然有一個錯誤std::getline
和cin.getline
,這需要用戶推入輸入兩次,以便std::getline
函數返回控制回程序。取此示例代碼,例如:C++如何修復std :: cin錯誤或解決它
int main(int argc, const char * argv[]) {
using namespace std;
string str;
cout << "Enter some text: ";
getline(cin, str);
cout << "\nYou Entered: " << str;
return 0;
}
結果:
Enter some text: hello world
我按回車一次,程序仍在運行,並等待輸入。我必須再次輸入以便程序停止詢問輸入並繼續執行。
我已經搜索了答案,這顯然是libC++中的一個錯誤,類似的錯誤也出現在MS VC++ 6.0中(我認爲)。
我試着通過使用cin.get(char)實現我自己的getline函數來解決問題,並在遇到'\ n'或'\ r'字符時返回。這是下面的代碼:
std::istream& getline(std::istream &in, std::string &str) {
char ch;
str.clear();
while (in.get(ch) && ch != '\n' && ch != '\r') {
str += ch;
}
return in;
}
不幸的是我仍然有同樣的問題,第一個新行字符不會被in.get返回因此,該程序再次掛起等待用戶推動第二次進入。有沒有解決這個問題的方法或解決方案,而不訴諸於陳舊的C-style fgets(stdin, buffer, bufsize)
。
加上'<<的std :: fflush'每個輸出後'cout' –
在getline之前忽略(也許) –
嘗試了兩者。我仍然有同樣的問題不得不推入輸入兩次。 – ALXGTV