首页 >

FAQ之 Console程序一闪而过

作者:fcode  日期:01-27
来源:Fcode研讨团队
绝大多数程序员开始接触编程,书写的都是 console 类型的程序。它在 windows 下运行起来就像是一个黑色的 DOS 窗口,但实际上,它与 DOS 是两个概念。

console 程序没有华丽的外部,在后台默默的工作,因为没有前台界面的东西,它更偏向于做后台的事情,比如计算。

console 程序在 windows 下运行,windows 规定它运行结束后,就会自动关闭。这是 windows 的规则。

对于某些计算速度很快的程序,console 运行速度很快,我们就会看到黑色的窗口一闪而过。这就造成了我们无法看清楚通过屏幕输出的各种提示和计算结果。

一. 通过IDE(集成开发环境)运行

通过开发环境来运行程序,通常会有两种方式:
1.常规运行。(中文一般为:开始执行(不调试),运行。英文为 Start 或 Start without Debug 或 Run 或 Execute )
2.调试运行。(中文为:启动调试,或 调试。英文为 Debug 或 Start Debug)


大图

其中常规运行通常环境会帮助我们解决这个问题。运行结束后保持窗口不关闭。而调试运行通常不会。如果您是初学,遇到类似下面的错误:
“Console1.exe”(Win32): 已加载“C:\Windows\System32\msvcrt.dll”。无法查找或打开 PDB 文件。
“Console1.exe”(Win32): 已加载“C:\Windows\System32\advapi32.dll”。无法查找或打开 PDB 文件。
“Console1.exe”(Win32): 已加载“C:\Windows\System32\sechost.dll”。无法查找或打开 PDB 文件。
“Console1.exe”(Win32): 已加载“C:\Windows\System32\rpcrt4.dll”。无法查找或打开 PDB 文件。
程序“[3016] Console1.exe”已退出,返回值为 0 (0x0)。

这说明你使用了调试运行方式,且没有添加断点。上述的错误其实根本不是错误,这表示程序正常结束了。

如果你不是刻意的进行调试(Debug),或者你根本不知道何为调试,我们建议你不要使用调试功能,而使用 “运行(不调试)”来执行编译后的程序。

二. 直接运行编译后的exe文件

方法一,在命令行下运行程序。使得程序结束后,返回命令行,而不关闭黑色窗口。

这个方法稍微麻烦一些。例如,E:\abc 文件夹下有一个 yourprog.exe ,是一个 console 程序。
那么:
1.开始,运行,输入 cmd ,回车,打开命令行。
2.输入命令(并回车):cd /d "E:\abc"
3.输入命令(并回车):yourprog.exe
你就可以看到运行结果了。如图,红色框为输入命令,需要与文件夹和程序名对应。绿色框为程序输出。

大图

方法二,在程序结束前,通过一些语句来延缓程序的结束。

一般早期的方法是使用 pause 语句,它以暂停为“借口”延缓程序的结束,例如:




Program www_fcode_cn
  Implicit None
  write(*,*) 'hello,www.fcode.cn'
  pause
  stop
End Program www_fcode_cn

请注意,第5行的stop并不是必须的,我们也不建议在程序最后使用stop。但是如果你使用了,pause 需要添加在 stop 前面。

由于 Fortran95 语法去除了 pause 语句。所以更标准的方法是使用一个空白输入语句。它以等待用户输入为“借口”延缓程序的结束。用它来替代 pause




Program www_fcode_cn
  Implicit None
  write(*,*) 'hello,www.fcode.cn'
  read(*,*)
  stop
End Program www_fcode_cn

不止 Fortran 的 console 程序存在这个问题,其他语言书写的 console 程序也存在这个问题。例如很多 C 程序员喜欢在程序最后增加一句 getchar(); 也是出于同样的理由和方法二的思路。

最后,console 程序一闪而过的问题,还可能是由于出现了运行时错误,程序异常而退出了。

因为方法二是倚靠在程序结束前延缓结束,对于中途异常退出,就不管用了。

此时,需要用方法一来查看运行时错误的具体错误提示。然后根据错误来修改代码,直到程序可以正常结束为止。
常规|工具|专业|读物|
代码|教学|算法|
首页 >
FortranCoder手机版-导航