vs中控制台程序输出时一闪而过的解决办法

比较常用的做法是使用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();
  1. C++中
  cout<<"按任意键继续……";
  cin.clear(); 
  cin.sync();
  cin.get();

备注:加上cin.clear(),cin.sync()这句,cin.clear() 用于清除输入流的失败状态(如果有),使其恢复正常;cin.sync();是清空缓存区,让cin.get()真正接收到你的键盘输入。
为什么加上cin.get()控制台窗口就会停在那了呢?
原因是:程序跑到这个位置就会停下来,等你输入一个字符(前提是输入缓冲区中没有字符,否则会直接从输入缓冲区中直接取,而不是等待键盘输入)
我在网上看到这样的解析:
大多数同学 C++ 的同学写的第一个程序都是 Hello world,八成也都能跑出来。但是差不多都是 cmd 窗口就一闪而过了,什么都看不清楚。要解决这个问题,可以在 main() 中的 return 语句前加一句 cin.get()。这样的话,程序跑到这个位置就会停下来,等你输入一个字符。代码如下(以下代码用的 IDE 是 wxDev-C++):
在这里插入图片描述
但是,如果在 cin.get() 前有 cin,那么这个方法就很可能失效了。下面的这个代码中的 cin.get() 就不会其作用:
在这里插入图片描述
原因是,在第一次使用 cin 后,我们没有清空流。所以当第二次使用 cin 时,输入流不是空的(输入是一个数字(比如 4),后面是一个空白符;而 cin 将接受这个数字,但是剩余一个空白符)。所以,cin 会从输入流中提取,而不是要求键盘输入。
要使 cin.get() 大法还有用,可以配对使用 cin.clear() 与 cin.sync()。两个函数:cin.clear() 用于清除输入流的失败状态(如果有),使其恢复正常;而 cin.sync() 用于清空输入流。

在这里插入图片描述
这样的话,cin.get() 就会请求键盘输入一个字符。

其实还有一个更好的解决办法:在你的项目条目(project)上右击鼠标,在弹出菜单上选择最后一项“property/属性”,在左边的一栏里找到“配置属性->链接器->系统”,点击“系统”项后,在右边的栏的“子系统(subSystem)”将刻项的值配置为"Console(/SUBSYSTEM:CONSOLE)"。

经过这样的配置后,再按Ctrl+F5,程序运行完毕后就会停留在控制台界面,提示你“按任意键继续”。到此,问题完美解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值