【问题标题】:Cin is being ignored in while and for loops在 while 和 for 循环中忽略 Cin
【发布时间】:2016-12-24 14:35:07
【问题描述】:

好吧,我是 C++ 新手,所以我在 Lippman 的 C++ Primer 5th Edition 中做一些练习,而该函数甚至从不提示用户输入。我非常沮丧,因为我生成的代码都没有工作,而且答案键也没有。这只会在编译和运行时产生“0”。任何帮助表示赞赏。在 x64 Mac 上编译。

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

    return 0;
}

【问题讨论】:

  • 如果您希望它提示输出,您必须对其进行编码。否则它只是希望你开始输入数据。
  • 你输入了什么?
  • ideone为我工作
  • 你用的是什么编译器?
  • 我没有输入任何内容,因为程序从来没有给我机会输入任何内容。 @PeteBecker。我正在通过终端进行编译。加布里埃尔F

标签: c++ while-loop cin


【解决方案1】:

该程序有效,只是与您的预期不同!

它希望您继续输入以空格分隔的数字,然后给出文件结尾(Windows 上的 ctrl-Z,Unix 上的 ctrl-d 空行)或其他无效输入,以便 cin 失败状态。

cin 进入失败状态时,它会为for 循环提供 false(由于使用重载的 bool cast 运算符隐式转换为 bool),该循环结束。然后你的程序打印它们的总和。如果您没有设法输入任何数字,则会打印 0,因为这就是 sum 的初始化值。

【讨论】:

  • 我确定我犯了一个错误,但我不明白它是什么。我根本没有机会输入数字。我在 macs 终端中通过 g++ 编译,然后使用 ./ 运行它
  • @StanDarsh 添加示例终端会话(复制粘贴优先于屏幕截图,除非您认为屏幕截图显示了复制粘贴文本不会显示的内容)。您还可以将调试打印添加到代码中(使用 cerr,而不是 cout),并检查 cin 提供的各种状态方法以了解它失败的原因。
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 2017-04-29
  • 2013-02-01
  • 2017-06-21
  • 2016-09-08
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多