解决C、C++程序执行结果一闪而过的方法---system("pause")、getchar()、cin.get()

在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system("pause")、getchar()、cin.get()。

比较常用的做法是使用system("pause"),这篇文章 Things to Avoid in C/C++ -- system("pause") 不推荐使用"system("pause"),因为:
1、不可移植。只适合Dos或Windows,不适合Linux等
2、耗费系统资源。调用系统命令system()去做"暂停程序"的事情有点大材小用。
3、必须添加头文件:stdlib.h或者cstdlib
所以,应该尽量摒弃。

推荐方法:
1、 C中,使用getchar();
2、 C++中,使用cin.get();

丰富一下两种替代方法:
1、C中

printf("按任意键继续……");

getchar();

2、C++中

cout<<"按任意键继续……";

cin.clear();

cin.sync();

cin.get();

备注:加上cin.clear()、cin.sync()这两句,是清空缓存区,让cin.get()真正接收到你的键盘输入。

本人注:有时候只用cin.get()无法使屏幕停住。具体原因:

cin.get()是取流中的一个字符
而cin>>sl;在输入时是以回车结束的,同时回车还保留在缓冲区里
这时当你cin.get()时,因为缓冲区不为空,就直接读了回车
你可以使用cin.sync()来清空流

cin.get();//是因为输出字符串的时候你输入了回车,而get()就读取了该回车符,所以停不下来
            //当加上fflush(stdin);时就将缓冲区的回车符清除了,所以等待你的输入而停了下来~

注:

技术在于交流、沟通,转载请注明出处并保持作品的完整性。

作者:╰☆奋斗ing?孩子`  原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101bg5f.html

时间: 2024-12-09 02:16:34

解决C、C++程序执行结果一闪而过的方法---system("pause")、getchar()、cin.get()的相关文章

Visual Studio控制台程序输出窗口一闪而过的解决方法

写个Hello World的程序试一下,发现执行结束后输出窗口会一闪而过,并没有出现Press any key to continue的字样.无论是在Visual Studio 2008.2010还是2012中都有这种情况出现,有些人可能会用下面两种方法中的一种: 在程序代码的最后加上system("pause")或者getchar().其实这是属于dos下的命令. 其实问题是你执行时按的是F5,而正确的应该是Ctrl+F5,这样窗口就会显示 Press any key to cont

转-Visual Studio控制台程序输出窗口一闪而过的解决方法

刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过,并没有出现Press any key to continue的字样.无论是在Visual Studio 2008.2010还是2012中都有这种情况出现,有些人可能会用下面两种方法中的一种: 在程序代码的最后加上system("pause")或者getchar().其实这是属于dos下的命令. 其实问题是你执行时按的是F5,而正确的应该是Ctrl+F5,这

(转)Visual Studio控制台程序输出窗口一闪而过的解决方法

背景:熟悉visiual studio工具的使用 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过,并没有出现Press any key to continue的字样.无论是在Visual Studio 2008.2010还是2012中都有这种情况出现,有些人可能会用下面两种方法中的一种: 在程序代码的最后加上system("pause")或者getchar().其实这是属于dos下的命令. 其实问题是你

你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事

2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却并不理解这种高级语言,也就无法直接执行高级语言编写而成的源文件.所以,这里就需要一个翻译的工作,将

MFC程序执行过程剖析

一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数.而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象.CWinApp类被称之为应用程序对象,在一个MFC程序当中只允许有一个应用程序对象.由于CWinApp的派生对象是全局的,因此这个对

mfc程序执行入口

一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数.而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象.CWinApp类被称之为应用程序对象,在一个MFC程序当中只允许有一个应用程序对象.由于CWinApp的派生对象是全局的,因此这个对

(转载)你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事

你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事 2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却

使用events.EventEmitter 控制Node.js 程序执行流程

标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 例如,

inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)

1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tools 2.inotifywait监控目录状态变化 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data # 可以把时间去掉 /usr/bin/