我的问题是,我想读取来自 std::cin
的输入但不知道输入多长时间。我也必须 char
并且不能使用 std::string
.
我必须处理两种方法:
a) 用户输入文本,当他点击 [ENTER] 时,程序停止阅读。
b) 用户重定向std::cin
到一个可以容纳多行的文件(如 .\a.oput < file
)。
编辑:刚刚注意到 std::cin.eof() 在从文件读取的情况下也始终为 false。
对于 a) 我可以阅读直到\n 发生。对于 b) Edit: No (我可以阅读直到 std::cin.eof() 发生。) 但是当我不知道我遇到的是 a) 还是 b) 问题时,我该如何中断阅读过程?
这就是我想要的 a) ...
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer && buffer != '\n')
{
// do some stuff with buffer
}
...和b)
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer)
{
// do some stuff with buffer
}
我也知道有 std::cin.tellg()
获取流中的当前位置。
编辑: 因此,在文件的情况下,输入流似乎以 std::cin >> std::noskipws >> buffer
的方式终止。得到 false
.
上面的代码对 a) 做了什么:
- 它等待用户进行输入并按 [ENTER]
- 然后循环遍历用户在最后一行输入的每个字符。
- 然后它再次等待用户进行输入并按 [ENTER]
- 无限等待处理循环
那我该怎么做呢?
最佳答案
您可以要求输入始终结束 EOF(意思是从需要按下 ^D
的命令行)然后像往常一样使用 b 的过程。这也将启用来自 cmdline 的多行输入
关于c++ - 如何从 std::cin 读取直到流结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234171/