簡體   English   中英

c ++終止while循環,以'|'讀取數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM