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 中重定向标准输出时的奇怪行为

为了在控制台和文件中获得输出,您必须保持标准输出不接触,不要重新打开它,freaopen()也不要关闭它。并且您必须在文件和标准输出中两次打印您的消息

于 2013-04-04T10:32:46.563 回答
0

我也曾经遇到过这样的要求。

我为这样的打印日志制作了一个宏。该打印宏扩展为一个函数,该函数根据某些控制变量设置在我的日志文件和 stdout 或 stderr 中打印该消息。

于 2013-04-04T13:27:08.210 回答