我写一个实验性的组网方案,基本上是学习网络测试程序。 我使用SDL和SDL_net在代码:: Blocks的使用MinGW,所以控制台输出被定向到stdout.txt。 我搜索了四周,发现可以通过包括SDL_Init()后,解决这个问题:
freopen("CON", "w", stdout); //stops redirect of output
freopen("CON", "w", stderr); //and errors...
这完美地工作,但只有建立在IDE中运行该程序时:IDE的(在程序如双击)之外运行,当程序正常运行,与控制台输出,这仍然是空白的除外。 作为该计划被认为是一个控制台程序,这是一个严重的问题......我不希望有始终运行在IDE中的程序来使用它。
任何解决方案是apreciated但我宁愿它是一个改变的代码,但在紧要关头,一个批处理文件会做(我读了一些文章,其中这是唯一可行的事情,但他们没有去到很多细节,所以我不能复制它)。 谢谢。
你看看在SDL控制台常见问题 ?
他们提供了许多建议,其中包括:
第一次尝试
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );
如果它不工作(如你的情况),尝试
#include <fstream>
#include <iostream>
using namespace std;
....
ofstream ctt("CON");
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );
...
ctt.close();
要么
FILE * ctt = fopen("CON", "w" );
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );
...
ctt.close();
另一种选择是重新编译SDLmain
库或添加SDLmain
代码到您的项目,并停止对链接库。
对于(MinGW的)SDL 2.0用户
SDL 2.0在默认情况下禁用控制台,或者更确切地说,它不会启用它。 由于与编译-mwindows
禁用控制台,标准输出不指向任何东西。 SDL_Log是一个小票友,可以找到使用Windows API控制台,但它不能捕捉标准输入,因为cmd.exe
偷走了:(。
SDL不要求控制台由于种种原因,很可能是因为该程序被编译-mwindows
。 指定WinMain
为切入点,也可能使cmd.exe
回收控制台。 从我读过SDL_main
可能重定向输出和错误。
你也许可以逃脱#undef
“荷兰国际集团主,和/或
- 调用
AllocConsole();
后SDL_init(...);
- 使用
freopen("CON", stdout)
- 编译不
-mwindows
( #undef
“荷兰国际集团main
似乎没有产生任何影响)
但你应该真的只是stdout重定向到如猫,与main | cat
main | cat
(始终遵循规则“不要#undef
主,除非你要”)。
TL; DR
要捕获stdout
为MinGW的,只要将您的计划,以cat
: main | cat
main | cat
。 这是一个黑客简单地确保输出和错误不点什么。
为了捕捉这两个stdin
和stdout
,编译不-mwindows创建一个Windows控制台应用程序。 如有必要,这将打开一个新窗口。
注意:在使用上述方法之一,当冲洗输出这是特别重要的。 依托行缓冲是不好的做法呢。
(我不能因为我没有足够的声誉这个昨天发布)
好了,做了一个小实验,在批处理文件的行。 我得到的和(几乎)工作批处理文件:
program.exe
没想到会是这样简单,但仍然无法理解为什么在程序双击不起作用。 我说的话简直工作,因为客户端连接到服务器控制台空白出来后,所以还是存在问题。 所以,我还是真的apreciate这个问题的任何帮助。
(昨日的预期后完)
(今天的回答Begining)
我试图Emartel的建议,但它仍然没有奏效。 做了一些测试,发现打印空字符串的无限循环是连接客户端后导致黑屏的问题。 固定循环,现在它工作正常,但我还是要使用批处理脚本。
将apreciate知道是否有人曾经计算出为什么双击不起作用。
有两个原因:
您可以使用:
std::cout << "Hello World";
该消息将被存储在文件stdout.txt。