1

我正在使用以下命令执行我的程序: ./myProgram -i test.in -o test.out

这两个文件都是合法的并且存在。

// 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);
}

我写这个块是main为了重定向cincout根据char **argv. cin工作得很好,但cout没有。当我这样认为它有效时:

// 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());

是什么导致了问题?

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

它不起作用,因为您需要 j 才能i+1使输出重定向起作用。试一试——如果你先通过第一个样本-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 回答