Printf没有输出任何内容?C++ SDL

18

我正在尝试在我的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).

就是这样了。可能出了什么问题吗?


通常情况下,0 表示成功。尝试输入任何内容(或)在返回语句处设置断点。 - Mahesh
你是否正确使用SDL?请参考http://www.cplusplus.com/forum/general/11692/了解`SDL_main`与`main`之间的问题。要么你的应用程序不是控制台应用程序,我感觉是这个原因。 - ta.speot.is
@Qasim http://msdn.microsoft.com/en-us/library/ms235639(v=vs.100).aspx - A. K.
是的,我正在使用这里的指南:http://www.lazyfoo.net/SDL_tutorials ,并且没有犯任何错误地按照指南的步骤进行。我甚至创建了3个新项目来确认是否犯了什么错误。 - Qasim
@AdityaKumar 我在 main.cpp 上遇到了找不到 SDL 库的错误。我不认为命令行会解决这个问题。我真的认为像 Visual C++ 这样专业的 IDE 应该显示 printf?我可能做错了什么? - Qasim
显示剩余14条评论
9个回答

19

打开项目属性,进入链接器 -> 系统 -> 子系统,将其更改为第三个选项,CONSOLE。就可以了。


在链接器部分设置程序入口点。 - andreszs

10

SDL默认将stdout重定向到一个名为stdout.txt的文件中。你可以在程序的工作目录中找到它。


谢谢。这个文件是在Visual C++项目的Debug文件夹中创建的,包含了我调用的所有“std::cout”函数。 - Qasim

8
在项目属性的“链接器 -> 系统”中,请检查子系统是否为"Console (/SUBSYSTEM:CONSOLE)"。这将导致在运行程序时弹出一个单独的控制台窗口。但是,如果您当前的入口点不是main,则需要更改它。

在VC++2005中更改入口点,需在“配置属性”>“链接器”>“命令行”>“附加选项”中添加“/ENTRY:“WinMainCRTStartup””。 - andreszs

6
一切都正常,我甚至已经将图像显示到屏幕上了,但没有输出信息的方式就无法编程。
我猜这意味着您有一个窗口可用,而不是控制台。
如果您想将某些内容记录到输出窗口,请使用OutputDebugString

Sends a string to the debugger for display.

void WINAPI OutputDebugString(
  __in_opt  LPCTSTR lpOutputString
);

Header WinBase.h (include Windows.h)


有没有办法同时拥有窗口和控制台? - undefined

4

通常在控制台中使用Printf函数需要增加一个换行符来更新内容。只需在字符串末尾添加'\n'字符即可,然后重新运行程序。


很遗憾,仍然没有输出!我在想是什么原因导致这种情况。非常荒谬。 - Qasim

3

1
这仅适用于SDL1.2,不适用于SDL2。当您搜索SDL2的源代码时,您会看到该符号未被使用。 - Bram

0

你可能没有看到输出,因为你是通过按F5在Visual Studio中运行程序,而控制台窗口在程序退出后关闭了。

你可以做以下三件事情之一 -
在return语句处设置断点。
在return语句之前放置一个getchar()语句。
按Ctrl+F5而不是F5来运行程序。

以上所有方法都会使控制台窗口保持在屏幕上。

你也可以直接从命令提示符(cmd.exe)中运行EXE文件。


1
在return语句处设置断点后,我不知道在哪里查找控制台。 当按下Ctrl+F5时,输出视图保持为空,但当我只使用F5时,输出会显示构建日志和调试日志,并包含以下内容:http://pastebin.com/UKWpCKsD 所有的PDB错误都与此有关吗? - Qasim
你看到的PDB错误并不重要。检查printf函数的返回值,它返回已打印字符的数量。printf函数将字符输出到单独的控制台窗口而不是输出视图中。 - Superman
如何访问单独的控制台窗口? - Qasim
当你按下Ctrl+F5时,会打开一个控制台窗口。请检查您的任务栏。 - Superman
永远不会打开任何控制台,只会出现输出窗口。 - Qasim
看起来你还没有创建控制台应用程序。printf 输出到控制台。请改用 OutputDebugString。 - Superman

0
我在尝试编写一个简单的控制台时遇到了这个问题,我的解决方法是添加了一个 fflush(stdout)
printf("Hello world!\n");
fflush(stdout);

-4
在运行/调试程序时,Visual Studio有一个输出窗口。您应该能够在那个窗口中看到输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接