如何将 cin 重定向到 in.txt 并将 cout 重定向到 out.txt?
ldg2000 回答:如何将cin和cout重定向到文件?
这是您想要执行的操作的示例.阅读注释以了解代码中每一行的作用.我已经在我的电脑上用 gcc 4.6.1 测试过它;它工作正常.
#include <iostream> #include <fstream> #include <string> void f() { std::string line; while(std::getline(std::cin, line)) //input from the file in.txt { std::cout << line << " "; //output to the file out.txt } } int main() { std::ifstream in("in.txt"); std::streambuf *cinbuf = std::cin.rdbuf(); //save old buf std::cin.rdbuf(in.rdbuf()); //redirect std::cin to in.txt! std::ofstream out("out.txt"); std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt! std::string word; std::cin >> word; //input from the file in.txt std::cout << word << " "; //output to the file out.txt f(); //call function std::cin.rdbuf(cinbuf); //reset to standard input again std::cout.rdbuf(coutbuf); //reset to standard output again std::cin >> word; //input from the standard input std::cout << word; //output to the standard input }
您可以在一行中保存和重定向:
auto cinbuf = std::cin.rdbuf(in.rdbuf()); //save and redirect
此处 std::cin.rdbuf(in.rdbuf()) 将 std::cin's 缓冲区设置为 in.rdbuf()然后返回与 std::cin 关联的旧缓冲区.使用 std::cout 也可以做到同样的事情 —或任何流.
Here std::cin.rdbuf(in.rdbuf()) sets std::cin's buffer to in.rdbuf() and then returns the old buffer associated with std::cin. The very same can be done with std::cout — or any stream for that matter.
希望有所帮助.
这篇关于如何将cin和cout重定向到文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!