0

私は以下のプログラムを持っています、

void Print()
{
    printf("\nCall from Print\n");
}

int main()
{
    FILE * pFile;
    char mystring [100];

    pFile = freopen ("myfile.txt" , "r", stdin);
    if (pFile == NULL)
    {
        perror ("Error opening file");
    }
    else 
    {
        if ( fgets (mystring , 100 , pFile) != NULL )
        {
            freopen("myfile.txt" , "a", stdout);
            Print();
            printf("Here it is\n");
            //puts (mystring);
        }
        fclose(stdout);
        fclose (pFile);

    }
    printf("Hello World\n");
    return 0;
}

プログラムを実行しているときに、コンソール ウィンドウに出力が表示されません。すべての出力はmyfile.txtファイルにリダイレクトされます。console出力が両方に入るようにしたいですmyfile.txt

結局のところprintf("Hello World\n")、コンソールに出力されないのはなぜですか。コンソールでも印刷するにはどうすればよいですか?

私はwindows-7、visual studio-2010で働いています

4

3 に答える 3

3

stdout最も簡単な方法は、コンソールに出力するための元のファイルとファイルの両方に手動で出力することで、より明確にすること です。

ファイルをポイントするために再度開くstdoutと、コンソール ウィンドウへの接続が削除されます。これが、出力が表示されない理由です。

のみを使用して、出力をファイルに複製するstdoutなどの外部ツールを使用することもできます。tee

于 2013-04-04T10:32:11.707 に答える
3

freopen("myfile.txt" , "a", stdout);

stdout出力をファイルに作成しますmyfile.txt この関数は、出力をコンソールからファイルにリダイレクトしますmyfile.txt

を使用してもfclose(stdout);、これは stdout の出力をコンソールに戻さず、コンソールを閉じるだけです。myfile.txt

詳細については、次のリンクを参照してくださいC で stdout をリダイレクトするときの奇妙な動作

コンソールとファイルの両方で出力を取得するには、stdout をそのままにしておく必要があります。それを再度開いたりfreaopen()閉じたりしないでください。そして、メッセージをファイルと標準出力に2回出力する必要があります

于 2013-04-04T10:32:46.563 に答える