【发布时间】:2020-04-03 22:24:42
【问题描述】:
有人问我一个问题,要编写一个接受并返回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 才能停止循环 - 还有其他方法可以做到这一点吗?
【问题讨论】:
-
我很困惑你的问题到底是什么。您的函数实现了第一段中描述的功能。您是否希望它在 之前
EOF终止?还是您在问是否有其他方法可以从您的外壳发送EOF? -
注意:
while((ob>>s)&&(!ob.eof()))有点多余。测试ob>>s涵盖了EOF的检测。