将输出重定向到文件然后返回到 C++ 中的控制台

Redirecting output to file then back to console in C++

任务是从 input.txt 读取输入并将输出写入 output.txt。 但是,在完成上述任务后,现在应该向控制台显示更多 instructions/output。

开始了解 c++ 中的 freopen(),它可以很好地完成给定任务的前半部分。但不幸的是,我不知道如何将输出再次重定向回控制台。

void writeIntoFile(){

   freopen("input.txt","r",stdin); // Task 1. Reading from input.txt file
   freopen("output.txt","w",stdout); // Task 2. Writing to output.txt file
   printf("This sentence is redirected to a file.");
   fclose(stdout);
   printf("This sentence is redirected to console"); // Task 3. Write further output to console

}

我对 fclose() 的期望是它最终会写入文本文件,因此会进一步将输出写入控制台,但事实并非如此。我怎样才能完成任务 3。

可能您正在寻找的是 doomista 在评论中提到的 rdbuf()。

这是一种重定向输出的方法。

#include <iostream>
#include <fstream>

int main()
{
    /** backup cout buffer and redirect to out.txt **/
    std::ofstream out("out.txt");

    auto *coutbuf = std::cout.rdbuf();
    std::cout.rdbuf(out.rdbuf());

    std::cout << "This will be redirected to file out.txt" << std::endl;

    /** reset cout buffer **/
    std::cout.rdbuf(coutbuf);

    std::cout << "This will be printed on console" << std::endl;

    return 0;
}