【发布时间】: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