2016-08-17 54 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