如何在C ++ / Windows中输出到控制台

在Linux上使用C ++编写iostream时,它会在terminal上显示程序输出,但是在Windows中,它只是将输出保存到stdout.txt文件中。 我怎么能在Windows中使输出显示在控制台中?

既然你提到了stdout.txt我谷歌它看看究竟会创建一个stdout.txt; 通常情况下,即使使用Windows应用程序,控制台输出也会转到分配的控制台,如果没有分配,则无法通过。

所以,假设你正在使用SDL(这是唯一提出了stdout.txt),你应该按照这里的建议。 freopen stdout和stderr与“CON”,或做其他链接器/编译解决方法那里。

如果链接再次被破坏,这里就是从libSDL引用的内容:

我如何避免创建stdout.txt和stderr.txt?

“我相信SDL附带的Visual C ++项目里面有一个SDL_nostdio目标,你可以建立你想要的(TM)。”

如果你定义了“NO_STDIO_REDIRECT”并重新编译SDL,我认为它会解决这个问题。“ (答案由Bill Kendrick提供)

您可以使用将控制台I / O添加到Win32 GUI应用程序中描述的过程将控制台添加到Windows非控制台应用程序

gamedev.net上有一个完整的主题。

如果您有一个无控制台Windows应用程序,您可以使用AllocConsole函数创建一个控制台。 一旦创建,您可以使用正常的std :: cout方法写入它。

要在Visual Studio中进行调试,您可以打印到调试控制台:

OutputDebugStringW(L"My output string."); 

首先,你使用的是什么编译器或开发环境? 如果是Visual Studio,则需要创建一个控制台应用程序项目以获取控制台输出。

第二,

std::cout << "Hello World" << std::endl;

应该在任何C ++控制台应用程序中工作。

AllocConsole Windows API函数将为您的应用程序创建一个控制台窗口。

如果您使用Visual Studio,则需要修改项目属性配置属性 – > 链接器 – > 系统 – > 子系统

这应该被设置为: 控制台(/ SUBSYSTEM:CONSOLE)

你也应该改变你的WinMain是这个签名:

 int main(int argc, char **argv) { //... return 0; } 

您的应用程序必须编译为Windows控制台应用程序。

是否使用子系统:控制台或子系统:Windows类型取决于你是否想要启动你的应用程序:

  • 如果你使用子系统:控制台,那么你把所有的stdout写入终端。 麻烦的是,如果你从开始菜单/桌面启动应用程序,你(默认情况下)出现一个控制台以及应用程序窗口(这可能看起来很丑)。
  • 如果使用subsystem:windows,即使从DOS窗口, Cygwin或其他终端运行应用程序,也不会得到stdout / stderr。

如果你想要输出到终端的中间方式,如果应用程序是在终端启动的,请按照Luke在他的解决方案( http://dslweb.nwnexus.com/~ast/dload/guicon)中提供的链接进行操作&#x3002; htm )

作为参考,我遇到了一个应用程序,我想运行在正常的Windows模式或批处理模式(即作为脚本的一部分),这取决于命令行开关的这个问题。 控制台和Windows应用程序之间的差异对Unix人来说有点奇怪!

我假设你正在使用一些版本的Visual Studio? 在Windows中, std::cout << "something"; 应该把东西写到控制台窗口如果你的程序在项目设置中作为控制台程序设置。

如果您使用Visual Studio,它应该工作得很好!

这是一个代码示例:

 #include <iostream> using namespace std; int main (int) { cout << "This will print to the console!" << endl; } 

确保在创建新项目时选择了一个Win32控制台应用程序。 您仍然可以使用控制台开关(>>)将项目的输出重定向到文件。 这实际上将控制台管道从stdout重定向到您的文件。 (例如, myprog.exe >> myfile.txt )。

我希望我没有错!

您不一定需要对代码进行任何更改(也不需要更改SUBSYSTEM类型)。 如果你愿意,你也可以简单地将stdout和stderr传递给一个控制台应用程序 (一个Windows版本的cat运行良好)。

如果使用MinGW ,请添加选项-mconsole -Wl,subsystem,console-mconsole