我有一个程序从终端读取输入,来自cin
的流在多个类中用于在各个级别进行解析。
我没有使用cin
从终端获取数据,而是想读取一个包含我需要解析的信息的文件,但我不想修改我的所有头文件和.cpp文件接受ifstream&
参数。
为了保持现有代码,我只是想将ifstream
重定向到cin,但不知道如何。
假设我在main中有以下内容:
ifstream inFile("myfile.txt", ifstream::io);
string line;
while(getline(inFile, line))
{
char firstChar;
inFile >> firstChar;
cout << firstChar;
inFile.ios::rdbuf(cin.rdbuf());
Continue myFile;
}
在continue.cpp
我正在做的事情:
Continue()
{
string line;
cin >> line;
cout << "---remaining line: " << line << "\n";
}
然而,它只打印来自main的第一个字符。
答案 0 :(得分:8)
只需将指针交换到std::streambuf
:
ifstream file("myfile.txt");
string line;
if (file.is_open()) {
cin.rdbuf(file.rdbuf()); // swap
cin >> line;
}
std::cout << line;
答案 1 :(得分:4)
istream
读取的 std::streambuf
个对象,可以在out中交换。相关成员函数为.rdbuf
答案 2 :(得分:1)
您还可以将基础C stdin
文件句柄重定向到其他文件,这也会影响您的cin
:
freopen ("myfile.txt", "r", stdin);
答案 3 :(得分:-1)
这是一种非常快速简便的方法。
如果您的文件名为“file.txt”,则代码为:
fstream cin("file.txt");
这样,文件中的所有内容都会被重定向到cin&gt;&gt;