C++ 将ifstream替换为of stream donds';没有效果
在此代码中:C++ 将ifstream替换为of stream donds';没有效果,c++,io,C++,Io,在此代码中: //Program To Read Words Separated By White Space #include<iostream> #include<fstream> #include<string> int main() { std::string s; std::ifstream f; f.open("file.txt",std::ios::in); std::cin.rdbuf(f.rdbuf()
//Program To Read Words Separated By White Space
#include<iostream>
#include<fstream>
#include<string>
int main()
{
std::string s;
std::ifstream f;
f.open("file.txt",std::ios::in);
std::cin.rdbuf(f.rdbuf());
while(std::cin>>std::skipws>>s)
std::cout<<s<<'\n';
return 0;
}
//读取由空格分隔的单词的程序
#包括
#包括
#包括
int main()
{
std::字符串s;
std::iff流;
f、 打开(“file.txt”,std::ios::in);
标准:cin.rdbuf(f.rdbuf());
而(std::cin>>std::skipws>>s)
std::cout几乎流的fstream
和流的之间唯一的区别是流的在打开文件之前添加out
选项。
也就是说,您的流在两个方向上都是开放的
您可能会认为这是一个错误,但考虑到类层次结构,要很好地修复它并不容易
这就是说,您不应该为ifstream
和of stream
指定任何方向,而是编写
std::ifstream f;
f.open("file.txt");
或者,更习惯地说
std::ifstream f("file.txt");
代码中没有流的
。@MaximeGroushkin这就是为什么我问,即使替换ifstream
,也不会干扰输出。你想做什么,将std::cin
重定向到file.txt
?这并不能解决问题,但要养成用有意义的值初始化对象的习惯而不是默认初始化它们并立即覆盖它们。在这种情况下,这意味着将std::ifstream f;f.open(“file.txt”,std::ios::In);
更改为std::ifstream f(“file.txt”,std::ios::In);
@AgrudgeAmicus——假设默认构造函数执行一些需要很长时间的网络查找,而另一个构造函数则不执行。但更一般地说,将有意义的初始化与创建分离会留下一个间隙,并可能出现错误;假设在维护过程中,您删除了设置值的代码;代码是仍然有效,但您的对象初始化不正确。