1. ホーム
  2. c++

[解決済み] cinとcoutをファイルにリダイレクトするには?

2022-04-23 15:20:27

質問

をリダイレクトするにはどうすればよいですか? cin から in.txtcout から out.txt ?

解決方法は?

以下は、あなたがやりたいことを実現するための実例です。コメントを読めば、コードの各行が何をするのかが分かります。gcc 4.6.1のPCでテストしましたが、問題なく動作しました。

#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 << "\n";   //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 - または任意の ストリーム ということになります。

お役に立てれば幸いです。