我有以下程序,
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
答案 0 :(得分:3)
最简单的方法是通过手动打印到stdout
(原始,输出到控制台)和文件来更加明确。
通过重新打开stdout
指向该文件,您将删除与控制台窗口的连接,这就是没有输出的原因。
您也可以 使用stdout
,并使用tee
之类的外部工具将输出复制到文件中。
答案 1 :(得分:3)
freopen("myfile.txt" , "a", stdout);
会将stdout
输出到文件myfile.txt
此函数会将控制台的输出重定向到文件myfile.txt
即使您使用fclose(stdout);
,也不会将stdout的输出备份到控制台,它只会关闭myfile.txt
有关详细信息Strange behaviour when redirecting stdout in C
,请参阅以下链接为了在控制台和文件中获取输出,你必须保持stdout触发不要用freaopen()
重新打开它并且不要关闭它。你必须在文件和标准输出中打印你的消息两次
答案 2 :(得分:0)
我也曾遇到过这样的要求。
我为这样的打印日志制作了一个宏。该打印宏扩展为一个函数,该函数在我的日志文件和stdout或stderr中打印该消息,具体取决于某些控制变量设置。