2016-08-17 90 views
2

好吧我是C++的新手,所以我在Lippman的C++ Primer第5版中做了一些練習,該函數甚至不會提示用戶輸入。我非常沮喪,因爲我的代碼沒有任何工作,也沒有從答案的關鍵。這僅在編譯和運行時產生「0」。任何幫助表示讚賞。在x64 Mac上編譯。Cin在while和for loops中被忽略

#include <iostream> 
int main() 
{ 
    int sum = 0; 
    for (int val; std::cin >> val; sum += val); 
    std::cout << sum << std::endl; 

    return 0; 
} 
+0

如果您希望它提示輸出,您必須對其進行編碼。否則,它只是希望你開始輸入數據。 – NathanOliver

+1

你輸入了什麼? –

+0

適用於[ideone](http://ideone.com/LG9a9S) – amit

回答

1

該程序起作用,它的工作方式與您期望的不同!

它希望你繼續輸入空格分隔的數字,然後給出文件結尾(Windows上的ctrl-Z,Unix上的空行上的ctrl-d)或其他無效輸入,以使cin進入失敗狀態。

並且當cin進入失敗狀態時,它將給出錯誤for循環(由於隱式轉換爲bool使用重載布爾型轉換運算符),其結束。然後你的程序打印它們的總和。如果你沒有設法輸入任何數字,那麼它將打印0,因爲這是sum初始化的值。

+0

我敢肯定,我犯了一個錯誤,但我不明白它是什麼。我沒有機會輸入數字。我在Mac終端上通過g ++進行編譯,然後使用./ –

+0

@StanDarsh添加示例終端會話(在屏幕截圖中首選複製粘貼,除非您認爲屏幕截圖顯示的是禁用複製文本的內容)。你也可以添加調試打印到代碼(使用cerr,而不是cout),並檢查cin提供的各種狀態方法,以查看它爲什麼失敗。 – hyde