【问题标题】:How to stop getline() loop over cin automatically如何自动停止 cin 上的 getline() 循环
【发布时间】:2015-05-17 14:45:42
【问题描述】:

您好,我的代码如下:

while (getline(cin, line))
{
    // process on line
}

所以这会导致用户一直放置行,直到他输入 ^z。 我怎样才能让它在没有用户干预的情况下自动停止?例如,当用户粘贴不带^z的输入行时,我需要上面的循环进行处理然后停止。

【问题讨论】:

  • 用户只需粘贴输入行,它就会自动工作。您希望如何能够告诉程序用户“完成”了?如果没有明确的信号(文件结束、空行等),程序无法知道用户是要键入另一行还是实际上“完成”了。
  • 老实说,这听起来像是在寻求魔法。是否有一些规则允许程序识别输出的结尾?如果是这样,请执行该规则。如果没有,显然是做不到的。
  • 如果用户粘贴行,然后想再粘贴一些行或手动输入一些内容怎么办?
  • 我不是在求魔法,这正是学校解决方案所做的:它运行程序并自动粘贴输入并打印结果。

标签: c++ cin getline


【解决方案1】:

std::getline 将提取到:

  • 遇到EOF,设置eofbit
  • 遇到分隔符(未设置标志,因此下一次提取不会失败)
  • 你遇到了std::string::max_size,它设置了failbit
  • 发生错误

您不能让用户复制/粘贴并期望程序自动知道用户已完成。如果输入是其他东西,比如文件怎么办?

RE 评论:您仍然可以通过管道输入文件,而程序无法区分。

# will stop extraction via EOF
cat file | ./a.out

【讨论】:

  • 输入不能是文件,因为他们要求程序通过 cin 接受输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 2011-10-12
  • 2011-04-25
相关资源
最近更新 更多