[英]c++ Terminate while loop that reads numbers with '|'
我目前正在研究一本有關C ++的書,但被一個非常簡單的問題所困擾。
嘗試編寫一個包含兩個整數的程序,將其輸出並重復。
導致我出現問題的原因是該程序應該在“ |”時終止 輸入到控制台。
我已經試過了:
(在while循環內)
char c;
int a, b;
cin >> c;
a = c;
if (c == '|')
break
a = c - 48;
cin >> b;
b = c;
if (c == '|')
break;
b = c - 48;
.....
顯然,這僅適用於一小部分數字輸入。 是否有更好的方法可以使我能夠輸入多位數並檢測'|' 已經輸入? 如果這看起來很基礎,抱歉,靜態類型語言不是我的專長。
顯而易見的方法是使用循環,並在讀取(或至少嘗試讀取)后測試流向bool的轉換來檢查轉換:
int i;
while (std::cin >> i) // Try to read a number
std::cout << i << "\t"; // if successful, print it out
if (std::cin.peek == '|') // check why reading a number failed.
// end of input detected
else
// invalid input detected
我認為,您應該更改終止條件。 在這種情況下,如果終止條件是任何非數字輸入(字符,字符串),則可以獲得預期的結果(適用於數字輸入的整數范圍)。
你可以這樣嘗試...
...
if (!(cin >> a))
{
break;
}
if (!(cin >> b))
{
break;
}
...
//Uncomment the below two lines if you want to take more input
//cin.clear();
//cin.ignore(std::numeric_limits<int>::max(), '\n');
您的理解
如果(!(cin >> vaiable))為真,則表示
a)輸入的值不適合變量
b)該變量將不受影響
c)流仍然中斷
d)輸入的值仍在緩沖區中,並將用於下一個“ cin >> variable”語句。
如果要處理其他輸入,請執行以下操作:
a)通過cin.clear()修復流;
b)使用cin.ignore(std :: numeric_limits :: max(),'\\ n')清除緩沖區;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.