为什么我运行程序后窗口一闪而过就没了

来源:互联网 发布:落地晒衣架知乎 编辑:程序博客网 时间:2024/04/28 02:40

为什么会这样?原因简单到有点可笑:因为程序运行结束了
对于控制台程序,操作系统让它开始运行前会为它造一个控制台窗口,在它结束的时候为它销毁这个这窗口.所以,当程序的最后一条语句运行完后,没什么可做了,程序运行结束,窗口就没了
一般做法有这些:
     getchar()可以等待你输入一个字符,这样可以让程序等待在那
     system("pause")执行系统的pause命令,它也会等你
另外还有个特殊的:
       如果你是在IDE里编写完了程序,想要看运行结果,那你可以按Ctrl+F5来运行程序,那样即使你不使用上面的两条语句,也可以看见程序运行完后窗口没有消失  


       这是为什么呢?

       对于普通的做法,即按F5,IDE会直接启动编译成的exe,这和你双击一个exe启动它是等效的,而对于Ctrl+F5,IDE做的事有些不一样,它会去启动cmd.exe,也就是什么 命令提示符 那个程序,然后告诉它去运行编译好的程序.cmd.exe的行为是这样的,它启动其它程序时会把自己的这个控制台(它自己也是个控制台程序)借给这个程序使用,你的程序运行起来后就向这个控制台打印东西.等你的程序运行结束了,cmd.exe再得回控制权.注意,这时你的程序结束了,但cmd.exe还没有结束.而cmd.exe有个行为,就是会在它所启动的程序运行完后等待用户按个键.也就是你看见的"请按任意键继续..",或是"Press any key to continue..",显然,这行字并不是你的程序打印的
对于这点,你可以自己启动cmd.exe试试
       最后..虽然getchar和system("pause")效果看上去一样,但是..system("pause")是很浪费的,是大材小用.使用getchar()就行了.至于为什么这样,这里就不解释了




为什么VS中用CTRL+F5(执行不调试)没问题,但在wxDev-C++中用Run without Debugging怎么不行(就直接退出了)?
——只要是让编译出的程序脱离IDE的监护去运行,就称得上Run without debugging.所以"是不是with debugging"和"是不是会直接退出"是毫无关系的
只是在VS,它对Run without debugging的做法"恰巧"是让生成的程序运行在cmd.exe上,而cmd.exe正有那样的特性,所以..
而wxDev-c++也许(wxDev-c++我没有使用过)只是简单地让生成的程序运行起来,所以Run without debugging时看起来程序会直接退出(这并不妨碍它可以称作"Run without debugging")



你的程序是不是没有输入什么的,只是 一些 固定值的操作,因为计算机运行速度的关系...当然是一闪而过...加 头文件 <stdlib.h> 然后再 return 之前 加上 system("pause")//这是调用系统 操作,这句话是现实系统信息,这样的话,程序会在这条语句上运行 在DOS界面显示系统信息,达到了暂停的作用 ,按回车键 会 继续执行下一句话,如果加载最后就会退出 程序了~
直接双击.exe文件窗口一闪而过这是正常的,因为它属MS-DOS应用程序,而非windows应用程序。要想让其停留,只要让程序陷入等待状态就行了,例如等待输入,在程序最后加一句cin >> a;(a变量须申明)
或者还有方法是:
getchar()(); //等待输入回车再结束
因为你的运行窗口在程序一结束就关闭了,所以要加一个等待键,才能保证窗口不关闭




原创粉丝点击