为什么我的程序输出在Windows中闪烁并关闭?

JDe*_*age 10 c windows console

我正在尝试为K&R"Hello,world"构建一个.exe文件.书中给出的代码是:

#include <stdio.h>  
main()  
{  
    printf("Hello, world!\n");  
}  
Run Code Online (Sandbox Code Playgroud)

当我从Code :: Blocks(在Windows XP下)构建和运行时,我得到带有"hello world"消息的提示窗口.它一直打开,直到我手动关闭它.但是,当我双击.exe文件时,提示只是闪烁并消失,为什么呢?

rix*_*rrr 20

没有人明确告诉你这个,所以我会:

双击文件时看到的内容是正常的.你的IDE不(保持窗口打开)是一个功能,以帮助您调试应用程序.

为什么会这样?

由于您正在开发控制台应用程序,因此您的应用程序必须有一个控制台才能显示其输出.如果还没有,则创建一个新的控制台(黑色窗口).

如果从控制台内部(例如,从cmd.exe)启动程序,它将继承父级的控制台而不创建新的[1].

在使用控制台退出的最后一个应用程序(在第一种情况下只是您的程序)之后,控制台关闭.您将一直注意到这个控制台应用程序在没有参数的情况下运行时只打印帮助文本.如果从资源管理器中双击它们,带有一些文本的黑色窗口将闪烁然后立即关闭.

  • 有时候,做某事的程序会立即关闭,这就是你想要的.例如,您可以从脚本中调用这些应用程序.

  • 另一方面,您的应用程序可以是交互式的:等待用户输入,做某事,并且仅在用户告知时退出.显然,您无法编写这些应用程序的脚本,因为您需要让键盘上的人员告诉应用程序该做什么.

现在我们进入IDE部分:假设您正在开发第一种应用程序,即执行某项操作然后立即关闭的应用程序.屏幕闪烁不是很方便,每次运行都会消失,因为如何判断程序是否有效?假设您可以从它生成的输出中告诉它.

您当然可以启动命令行窗口并从那里运行应用程序,但程序将与IDE分开执行,您将失去实时调试功能.

因此,IDE制造商提出了一个控制台应用程序的功能:当您直接从IDE运行应用程序时,他们通常会等待按键.这使您有机会使用输出检查窗口,以确认应用程序正常工作.


[1] Esoterica:除非您通过不继承控制台的应用程序.该应用程序启动的任何控制台应用程序都不会继承控制台,因为GUI应用程序会破坏继承.例如,start.exe这样做.相比:

foo.exe (inherits the console)
start foo.exe (start.exe is a GUI app, so foo.exe is launched in a new console)
Run Code Online (Sandbox Code Playgroud)


dre*_*ewh 17

如果您没有从已经打开的命令行窗口运行命令行exe,Windows将在程序终止后自动关闭窗口.尝试打开cmd.exe,导航到程序目录并从那里运行,窗口应保持打开状态.