我尝试在我的 Visual C++ 项目中使用“printf”,但它不起作用。使用 Lazy Foo 的教程,我在项目中设置了 SDL,但是当我播放它时,printf 没有执行任何操作。
#include "SDL.h"
#include <stdio.h>
int main( int argc, char* args[] ) {
printf("Testing");
return 0;
}
输出如下所示:
The program '[4664] SDL Testing.exe: Native' has exited with code 0 (0x0).
就是这样。可能出了什么问题?
调出项目属性,转到链接器->系统->子系统并将其更改为第三个选项 CONSOLE。这样应该就可以了
SDL 默认情况下将 stdout 重定向到文件
stdout.txt
。您应该在程序的工作目录中找到它。
在项目属性的
Linker -> System
中,检查子系统是否为
"Console (/SUBSYSTEM:CONSOLE)"
。
这会导致在您运行程序时显示一个单独的控制台窗口。如果您当前的入口点不是主要的,那么您需要将其更改为该入口点。
一切正常,我什至在屏幕上显示了图像,但如果没有某种方式输出消息,我就无法编程
我认为这意味着您有一个可用的窗口,而不是控制台。
OutputDebugString
:
将字符串发送到调试器进行显示。
void WINAPI OutputDebugString( __in_opt LPCTSTR lpOutputString );
标题
(包括WinBase.h
)Windows.h
Printf 通常需要换行符来更新控制台。添加一个' ' 字符结束并重新运行程序。
尝试定义 NO_STDIO_REDIRECT。
#define NO_STDIO_REDIRECT
如果这不起作用,请尝试此链接中的解决方案:如何获取控制台输出而不是 stdout.txt 和 stderr.txt?.
您可能看不到输出,因为您是通过按 F5 从 Visual Studio 中运行程序,并且控制台窗口在程序退出后关闭。
您可以做以下三件事之一 -
在 return 语句处放置断点。
在 return 语句之前放置 getchar() 语句。
按 Ctrl+F5 而不是 F5 来运行程序。
以上所有内容都会导致控制台窗口保留在屏幕上。
您也可以从命令提示符(cmd.exe)直接运行 EXE。
我刚刚在尝试编写一个简单的控制台时遇到了这个问题,我的解决方法是添加一个
fflush(stdout)
printf("Hello world!\n");
fflush(stdout);
当您运行/调试程序时,有一个 Visual Studio 的输出窗口。您应该能够在该窗口中看到输出。