使用c-style i/o进行编程时,我有时会使用freopen()重新打开stdin进行测试,这样我就不必重复输入输入.我想知道是否有相当于c ++的i/o流.此外,我知道我可以使用管道在命令行/终端/任何炎症上重定向它但我想知道是否有办法在我的代码中执行它(因为你可以看到,我不是很了解CL/T/W).
Umm*_*mma 33
freopen也适用于cin和cout.无需搜索新内容.
freopen("input.txt", "r", stdin); // redirects standard input
freopen("output.txt", "w", stdout); // redirects standard output
int x;
cin >> x; // reads from input.txt
cout << x << endl; // writes to output.txt
Run Code Online (Sandbox Code Playgroud)
编辑:从C++标准27.3.1:
对象cin控制与声明的对象stdin相关联的流缓冲区的输入
<cstdio>.
所以根据标准,如果我们重定向stdin它也会重定向cin.反之亦然cout.
Rob*_*obᵩ 14
#include <iostream>
#include <fstream>
int main() {
// Read one line from stdin
std::string line;
std::getline(std::cin, line);
std::cout << line << "\n";
// Read a line from /etc/issue
std::ifstream issue("/etc/issue");
std::streambuf* issue_buf = issue.rdbuf();
std::streambuf* cin_buf = std::cin.rdbuf(issue_buf);
std::getline(std::cin, line);
std::cout << line << "\n";
// Restore sanity and read a line from stdin
std::cin.rdbuf(cin_buf);
std::getline(std::cin, line);
std::cout << line << "\n";
}
Run Code Online (Sandbox Code Playgroud)
http://www.cplusplus.com/reference/iostream/ios/rdbuf/