2014-02-16 237 views
-1
int n; 
while(cin>>n) 
    cout << n; // Run by the program if received an int value 
cout << "Break from loop"; // Run by the program 
cin >> n; // Skipped by the program 
cout << n; // Run by the program 

無法在使用字符終止while循環後接受另一個輸入。終止while循環後Cant cin

如何使用非整數/浮點值終止循環內的輸入時接受另一個輸入。

+0

這是一個正確的觀察。 –

+1

你的問題到底是什麼? –

+2

有沒有人知道比['cin.clear();函數getline(CIN,dummystring);'](http://stackoverflow.com/questions/7413247/cin-clear-doesnt-reset-cin-object)? – Beta

回答

0

如果未通過返回文件結束終止程序(即Ctrl-D)或完全終止程序(即Ctrl-C)。

也就是說,如果你退出通過不正確的數據類型,如在信d而不是一個整數,鍵入循環,就可以按照while環路與cin.clear()getline(cin, str),其中str一些string聲明的時間提前。

在此之後,您應該能夠接受第二個cin的輸入。

所以,

string str; 
int n; 
while(cin>>n) 
    cout << n << endl; 
cin.clear(); 
getline(cin, str); 
cout << "Break from loop" << endl;; 
cin >> n; 
cout << n; 
+0

哇!這只是正常工作。謝謝! – user3317046

0
int n; 
while(cin>>n) // Keep asking for value to input 
    cout<<n<<"\n"; // This loop will never terminate for any Supplied val 
//Above loop will terminate only when no more valued is supplied to code 
// Hence once, we stopped entering the value, code will execute next line 
// And end without asking for anymore value. 
cout<<"Break From Loop \n"; 
0

假設您的問題是「如何在流狀態設置後恢復輸入?」那麼有一個簡單的解釋:

while循環,其中您執行的提取僅在提取失敗之前終止;這還包括流何時到達輸入流(EOF)的末尾。當發生這種情況時,eofbit將被設置爲蒸汽狀態(以及故障位)。流的狀態設置時,流不能用於I/O。爲了再次使用它,必須清除流狀態。這是使用成員函數clear(std::ios_base::iostate err = std::ios_base::goodbit)完成的。

std::cin.clear(); 

這個調用將會在流狀態清除位並將它們分配給0std::ios_base::goodbit)。在這個調用之後,流可以再次用於I/O。

這是假設流讀取所有字符,直到它到達EOF。在獲取無效數據後終止的前期讀取是不夠的。其餘的字符也必須爲ignore()

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
+0

如果沒有額外的步驟來清除不好的字符,這對我無效。你確定這足夠嗎? – Beta

+0

@Beta這是假設流讀取所有字符,直到它達到EOF。在獲取無效數據後終止的前期讀取是不夠的。人們必須「忽略」殘留數據。 – 0x499602D2

+0

是的,這是我的問題,對不起不明白。然而,我仍然是一個noob,所以我不明白C++的技術。 – user3317046