2012-04-29 68 views
1

我正在讀地址:http://www.parashift.com/c++-faq-lite/new/istream-and-while.html的一些C++文本。爲什麼while(std :: cin >> foo)語法不起作用?

根據課文時,我寫了這個代碼:

int sum = 0, value; 
while(cin >> value) 
{ 
    cout << "value: " << value << endl; 
    sum += value; 
} 
cout << "sum: " << sum << endl; 

如果輸入的是:1 2 3 4 5

然後如我所料while循環沒有停止。我誤解了什麼嗎? (我正在使用MS Visual C++ 2005)

回答

6

您的while循環將讀取輸入,直到輸入流被關閉。在Windows控制檯中,這意味着直到用戶按下Ctrl + Z。

如果你想閱讀輸入,直到用戶按下輸入,你需要做不同的事情。例如,您可以使用getline讀取整行,然後將該行放入字符串流中,並在while循環中讀取該行 - 或者在讀取每個值之後使用istream類的peek()方法來檢查下一個字符在流中是一個換行符。

-1

你不需要while循環。 cin >> value只有一次。

+3

儘管有效,但它會顯着改變程序的含義(並且會使源代碼的其他部分過時)。 – delnan 2012-04-29 12:06:34

0

您可以設置退出循環的特殊值。

例如:

int sum = 0, value = 0; 
while(value != -199) 
{ 
    cin >> value 
    if(value != -199) { 
    cout << "value: " << value << endl; 
    sum += value; 
    } 
} 
cout << "sum: " << sum << endl; 

這個循環將只有當你按下-199退出(不一定是-199,我選擇它,因爲它是平凡的大多數程序)。如果不將它們用作輸入,它可以是0或-1。

0

在Windows控制檯,這意味着直到用戶按Ctrl + Z

我會注意,這並不一定是真正的,關於最高的答案。

而在循環,直到它變成不真實,或輸入操作者將保持無限期地活動狀態。由於它的本質,它正在尋找用戶輸入整數。根據您的示例,您必須輸入任何非整數才能將其評估爲false。

相關問題