《C++输入流和输出流》一节提到,cout 和 cerr、clog 的一个区别是,cout 允许被重定向,而 cerr 和 clog 都不支持。值得一提的是,cin 也允许被重定向。
那么,什么是重定向呢?在默认情况下,cin 只能接收从键盘输入的数据,cout 也只能将数据输出到屏幕上。但通过重定向,cin 可以将指定文件作为输入源,即接收文件中早已准备好的数据,同样 cout 可以将原本要输出到屏幕上的数据转而写到指定文件中。
C++ 中,实现重定向的常用方式有 3 种,本节将一一做详细讲解。
C++ freopen()函数实现重定向
freopen() 定义在头文件中,是 C 语言标准库中的函数,专门用于重定向输入流(包括 scanf()、gets() 等)和输出流(包括 printf()、puts() 等)。值得一提的是,该函数也可以对 C++ 中的 cin 和 cout 进行重定向。
举个例子:
#include //cin、cout
#include //string
#include //freopen
using namespace std;
int main()
{
string name, url;
//将标准输入流重定向到 in.txt 文件
freopen("in.txt", "r", stdin);
cin >> name >> url;
//将标准输出重定向到 out.txt文件
freopen(