在istream中输入EOF

问题描述 投票:-1回答:2

有人问我一个问题,编写一个函数,该函数接受并返回一个istream&。该函数应读取流,直到达到EOF,并且所读取的值应与标准输出一起打印。

这是我的代码,几乎可以正常工作:

#include<iostream>
#include<string>
#include<istream>


std::istream& fun(std::istream &ob)
{
    std::string s;
    while((ob>>s)&&(!ob.eof()))
        std::cout<<s<<'\n';
    return ob;
}

int main()
{
    std::istream &obj = fun(std::cin);
    return 0;
}

唯一没有发生的部分是程序(istream)到达EOF-我必须在终端上手动输入ctrl + d以停止循环-周围还有其他方法吗?

c++ io eof
2个回答
3
投票

这是预期的行为。

假设您处于Unix-y环境中,您也可以通过从shell重定向将输入管道传输到程序的stdin:

$ ./my_program < ./some_file.txt

或者,对于cat abusers

cat

这基本上等效于执行$ cat ./some_file.txt | ./my_program ,然后手动键入my_program的内容,然后手动键入some_file.txt


4
投票

这是预期的。

Ctrl + D是您发出EOF的信号。

否则终端将如何知道您希望停止提供输入? EOF实际在哪里?

© www.soinside.com 2019 - 2024. All rights reserved.