c++ - 如何从 std::cin 读取直到流结束?

标签 c++ iostream stdin eof io-redirection

我的问题是,我想读取来自 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/

相关文章:

c++ - SSL - 多线程

c++ - 如何使用 Clang 的 C++ API 从文件名/行/列三元组获取 SourceLocation

c++ - XCode 项目是否需要特殊设置才能使用预编译的 boost 库?

c++ - ifstream : check if opened successfully

haskell - 如何运行通过命令参数传递给解释器的 haskell 代码?

node.js - 如何从 NodeJS 管道到 NodeJS?

c++ - StartServiceCtrlDispatcher 无法访问 1063 错误

c++ - 从指针更改数组中的值?

c++ - 我的函数调用中未声明的标识符 (C++)

c - 打开()一个文件并在最后写入