1

I'm executing my program with the following command: ./myProgram -i test.in -o test.out

Both files are legal and exist.

// run all over the arguments and set the cin and cout if needed
for (int i = 1; i < argc; i= i+2)
{
    int j = i+1;

    // loop over each pairs of arguments
    do
    {
        // set cin
        if(argv[i] == "-i")
        {
            static std :: ifstream s_inF(argv[j]);
            std :: cin.rdbuf(s_inF.rdbuf());
            break;
        }

        //set cout
        if(argv[i] == "-o")
        {
            std::ofstream out(argv[j]);
            std::cout.rdbuf(out.rdbuf());
            break;
        }

        // in order to search for the other case
        // (example:X.out -i)
        int temp = i;
        i = j;
        j = temp;
    }while(i>j);
}

I wrote this block in main in order to redirect cin and cout according to char **argv. cin works just fine but cout does not. When I take it like that it works:

// run all over the arguments and set the cin and cout if needed
for (int i = 1; i < argc; i= i+2)
{
    int j = i+1;

    // loop over each pairs of arguments
    do
    {
        // set cin
        if(argv[i] == "-i")
        {
            static std :: ifstream s_inF(argv[j]);
          std :: cin.rdbuf(s_inF.rdbuf());
          break;
        }

        //set cout
        if(argv[i] == "-o")
            break;

        // in order to search for the other case
        // (example:X.out -i)
        int temp = i;
        i = j;
        j = temp;
    }while(i>j);
}

std::ofstream out(argv[4]);
std::cout.rdbuf(out.rdbuf());

What is causing the problem?

4

2 に答える 2

3

ストリーム バッファをインストールしstd::coutたストリームは、ストリーム バッファをインストールした直後に破棄されます。

std::ofstream out(argv[j]);
std::cout.rdbuf(out.rdbuf());

最初の行を読む必要があります

static std::ofstream out(argv[j]);

他のエラーがあるかもしれませんが、これは私が見つけたものです。

于 2013-01-02T21:42:49.627 に答える
0

i+1出力のリダイレクトが機能するためにj が必要なため、機能しません。試してみてください。最初のサンプルで最初に を渡し、-o次にを渡すとどうなりますか?-i

これを変える:

        int temp = i;
        i = j;
        j = temp;

これに:

        int temp = i;
        i = j;
        j = temp + 1;

while 条件にも取り組む必要があります。

ところで、なぜあなたjはまったく必要なのですか?i でのみ行うことができ、リダイレクトに i+1 を使用します。これにより、コードも理解しやすくなると思います。

于 2013-01-02T20:14:06.950 に答える