【问题标题】:C++ getline(cin, buffer) doesn't stop when I press CTRL+Z [duplicate]当我按下 CTRL+Z 时,C++ getline(cin, buffer) 不会停止 [重复]
【发布时间】:2016-10-11 11:41:00
【问题描述】:

我正在Windows 中编写一个CLI 应用程序,它接受string 作为输入。我假设输入结束是用户按下 Ctrl+Z (模仿EOF)。

当我输入“qwe”并按 Ctrl+Z 时,getline 而不是仅仅将“qwe”分配给@987654327 @ 出于某种原因要求我再输入一行。但是,tmp 中的结果值仍然是“qwe”,忽略了额外的行。我使用的代码如下:

    string tmp;
    getline(cin, tmp);

UPD:

正如C++ Issue with cin and CTRL + Z 中所说,这只是通常的 Windows 行为,其中 Ctrl+Z 符号 must 位于行首。

要获得多行输入,您应该使用按字符读取,直到遇到 '\n' || EOF

【问题讨论】:

  • hmm,查看重复的主题,当我在输入的开头按 CTRL+Z 时,它完美地工作。但是如果它在最后或中间,那么它会要求一个额外的行并将 '^Z' 之前的所有内容分配给 tmp ,然后才移动到下面的代码行。那就是如果getline在while内
  • 那么这是关于 ctrl+z 在 std::cin 中的行为的问题,还是您只是想读取字符串数组中的文件?还是我理解错了?
  • 我需要将标准输入读入一个字符串数组。这就是任务。但我假设他们会用 ctrl+z 结束输入,所以我想确保 getline 在那之后不会要求输入。或者用户只需要知道如何使用 ctrl+z 即可?这似乎很奇怪。但是该任务将由 codeforces.com 我的意思是服务器检查,所以也许我只需要保持原样
  • 为什么需要数组?您需要拆分输入字符串吗?数据是如何输入的(如果那是一个词)?
  • 好吧,它只是标准输入,所以它应该模仿键盘(也许只是过去的数据,就像我用 ctrl+v 做的那样)。我需要一个数组,因为我需要处理每个字符串然后输出。该程序的目的是格式化文本的缩进

标签: c++ windows input getline eof


【解决方案1】:

正如 OP 所解释的:这是典型的 Windows 行为,其中 Ctrl+Z 符号必须位于行首,否则将无法按预期工作。

所以如果你输入“foo”,然后按Ctrl+Z发送EOF信号,然后输入“bar”,“foo”将按预期读取,然后EOF将在输入缓冲区中等待,直到也输入“bar”。程序将按原样停止在EOF 并且“bar”将被忽略,即使用户输入了它。

C++ Issue with cin and CTRL + Z阅读更多内容。

【讨论】:

  • 嗯,是的,这和我上面写的完全一样。
  • @Sam 非常肯定,但答案应该放在答案部分,这就是为什么我认为发布答案是个好主意。 =)
  • 这个主意确实不错:)
猜你喜欢
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多