0

私はプログラミング初心者で、競技プログラミングに興味があります。最近、COCI 問題のグレーダーを作成しました。このコードの関数では、ループを使用して入力ファイルから入力を取得します。そのファイルを開く部分は次のようになります -

int next(int id)
{

    // [[OPEN FILES]] -----------------------

    string name1 = probid+".in." + itoa(id);
    string name2 = probid + "OUTPUT" +".out." + itoa(id);

    FILE *fp1 = fopen(name1.c_str(), "r");   
    if(!fp1) return 0;                            // no file left?
    FILE *fp2 = fopen(name2.c_str(), "w");        

    // process data
}

「id」は入力ファイルを変更して開き、結果を出力ファイルに書き込みます。主な問題は、(fscanf) を使用してデータを読み取る必要がありますが、cin、cout を使用して入力を取得したいことです。(フリーオープンが提供するもの)

しかし、freopen を使用してループを実行すると、複数のファイルからの入力の読み取りに失敗します。そのため、fopen() を使用する必要があります。

とにかく、cin、cout を使用して、この関数を使用してファイルから入力を取得できますか?

4

2 に答える 2

1

std::cinstd::coutは、標準入力と標準出力を参照するストリーム オブジェクトです。ただし、C++ には、ファイル用のストリーム クラスもありstd::ifstreamますstd::ofstream。それらはまったく同じ機能を使用>><<ます。

これらのファイル ストリーム クラスには.open()、前のファイルを閉じていれば、新しいファイルを開くことができるメンバーがあります。

于 2013-10-03T11:32:12.530 に答える
0

freopen () を使用できます。

freopen ("direcotry/to/input/file", "r", stdin); // second argument is opening mode

freopen ("direcotry/to/output/file", "w", stdout);

于 2013-10-03T08:59:22.313 に答える