【发布时间】:2013-11-03 04:56:47
【问题描述】:
我希望我的程序从标准输入读取直到 EOF,打印所有输入,然后重复。我尝试清除 stdin 的 EOF 状态如下:
#include <string>
#include <iostream>
#include <iterator>
using namespace std;
int main() {
cin >> noskipws;
while (1) {
printf("Begin");
istream_iterator<char> iterator(cin);
istream_iterator<char> end;
string input(iterator, end);
cout << input << endl;
cin.clear();
}
}
然而,在接收并打印第一个输入后,程序只是无限地打印“Begin”而不等待进一步的输入。
【问题讨论】:
-
如何继续阅读 EOF 之后的内容?一旦没有更多数据,就没有更多数据了。
-
@JonathonReinhart EOF 并不一定意味着永远不会有更多数据,只是已经到达文件末尾。用户进入 EOF 转义后,终端可以继续提供输入,并且文件可以写入更多数据。
-
@hobbs 我明白这一点。我实际上考虑了您提到的内容,但想不出任何标准的 UNIX-y 程序在从标准输入获取 EOF 后继续尝试读取。如果我按 Ctrl+D,我希望它完成。
-
最终我希望能够运行这个程序,输入一些跨越多行的输入,使用 Ctrl-D 发出 EOF 信号,并将我的输入转换为打印到标准输出。然后程序应该等待更多输入,然后是 EOF,然后打印到标准输出等。
-
@JonathonReinhart
tail -f理所当然地这样做(尽管通常不在标准输入上)。perl -从标准输入读取程序直到 EOF,然后将标准输入提供给程序以从中读取更多数据。他们是我唯一能想到的。无论如何,这当然是可能的。