2013-06-25 152 views
0

傳遞非整數輸入我有這樣的代碼:通過控制檯

int obj; 

    while (std::cin >> obj) 
    { 
     std::cout << obj << std::endl ; 
     int temp = obj ; 
     ++ temp; 
     std::cout << temp << std::endl ; 
    } 

當我給適當的整數輸入,我明白的輸出。

例如。如果我得到12作爲輸入,我看到這樣的事情在控制檯上:

12 
12 
13 

但是,如果我給一些整數以空格作爲輸入,我似乎無法理解的輸出。

例如。如果我給12 12 12 12作爲輸入,我可以在控制檯上看到:

12 12 12 12 
12 
13 
12 
13 
12 
13 
12 
13 

有人可以解釋嗎?

+3

爲什麼這與你所期望的不同?這似乎與預期完全一致。它讀取一個數字,打印它,加1,打印,等等。 – jogojapan

+4

嘗試通過調試器運行代碼,逐行瀏覽每一行並觀察發生了什麼。這將使您更好地瞭解代碼的工作原理。 – TheDarkKnight

+0

結果看起來很明顯,所以如果你沒有說出你期望得到的結果很難幫助你,因爲我們不知道你有什麼誤解。 –

回答

2

第一個示例包含您的輸入。正是這種

輸入

12 

輸出

12 
13 

第二個例子是,乘以4倍,對於每個4個數字的接收到的作爲輸入。分隔符是「空格」 - 空格,新行或製表符。它不是一個 「非整數」,而是表示 「四個整數」:

輸入:

12 12 12 12 

相當於

12 
12 
12 
12 

輸出:

12 
13 
12 
13 
12 
13 
12 
13 
0

的循環讀取任何輸入,只有在你點擊「enter」後。因此,在第一種情況下,它會讀取一個值12,然後在temp中打印12和13以更新值,然後等待您輸入更多數字。

在第二種情況下,它讀取12,打印12,然後返回,讀取另一個12,打印另一個12,等等2次。然後等待你輸入更多的數據。

請注意,空白符合您輸入的分隔符。如果你想讓它出錯,嘗試輸入12a,在這種情況下,它將永遠打印12(直到你感到無聊並停止它),因爲它會在不更新的情況下在「a」處「停止閱讀」obj - 並且因爲循環中沒有任何內容會清除a,所以它繼續前進。

0

當您添加空間時,它將它們作爲單獨的值。併爲它們中的每一個運行while循環。

0
int obj; 
cin >> obj; 

cin從輸入讀取有效整數數據直到發現不屬於整數的字符,或者沒有更多的數據。在你的第一個例子中,cin敲擊輸入的結尾並返回數字。在第二個例子中,cin從字符串"12 12 12 12"中讀取輸入,從輸入流中提取第一個整數並將其寫入obj。在while循環的下一次運行中,cin會遇到字符串"12 12 12"(因爲它已經從輸入流中提取/刪除了第一個數字),故事會繼續,直到沒有更多輸入可供讀取。