百度空间 | 百度首页 
 
查看文章
 
双击C/C++的debug下*.exe一闪而过的解决方案(初学者适用版)
2008-02-28 20:32

这个问题困扰了我一段时间,网上看了些东西,最后算是差不多知道了。但回头来看我认为那些写的并不是很清楚,让一个刚学习C,C++的人来说可能不是很易接受。所以自己就整理了这么一篇。

Windows 环境下,直接双击C 或 C++(简称 C/C++)程序debug下*.exe,会出现程序一闪而过或者程序接收了输入后直接退出的现象,导致看不到运行结果。原因是由于程序运行结束后,自动关闭了运行窗口

网上有不少文章给出了以下三种方案,在此我换种方式做一总结:
1.我个人认为最最简结的一种:
在您想要暂停的地方加上 system("pause"); 就可以使 C/C++ 程序暂停。//我对“想要暂停的地方”的理解差不多就是程序的最后,即return 0;之前。一般都会是这样子的。
{不过,这个办法奏效的前提是系统中必须存在 pause 这个命令。此外,还需要包含标准头文件 stdlib.h(对于 C)或者 cstdlib(对于 C++)。(自互联网)}
对于上面括号里面的话我想做点纠正。一般情况下pause在系统里都会是存在的,这一点也就根本不用考虑。还有经我在vs2005里测试,我除 iostream 外并没有用其它任何头文件。

2.这一种方法我认为是在上面方法的确行不通时可以再考虑的方法

c++在您想要暂停的地方(完全同上述的地方)加上

           cin.clear(); // 清除以前流的标记,如果这里没有 clear,那么下面的输入就被忽略了,因为cin标志未清除
            cin.ignore( numeric_limits<streamsize>::max(), '\n' ); // 这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
            cin.get(); // 等待用户输入回车,为什么不一闪而过的关键原由

上面三行;此外还需要包含C++标准头文件 limits

(c则为
            while ( (c = getchar()) != '\n' && c != EOF ) ; // 清空输入流
            clearerr(stdin); // 清除流的错误标记
            getchar(); // 等待用户输入回车
此三行,要添加的头文件为stdio.h;这三行在C++里也可以,只是要添加的头文件为cstdio


3.这一种是打死我也不会用的一种方法
从DOS下去启动那个 *.exe ,具体方法有人感兴趣,用关键词“避免 C/C++ 程序一闪而过的方法”搜索,它会告诉你如何做的。在那里,这方法竟是头一条!


最后我附一个例子吧,我觉得比“避免 C/C++ 程序一闪而过的方法”更容易让初学者接受的例子。就这一个肯定足够了。

           #include <iostream>
          #include <limits>        
          using namespace std;

         /*-----------------------------------------------------------------------------------------------------------------------
         | 作者:路人乙
sutieee@qq.com   http://hi.baidu.com/sutiee      C/C++ 标准编程
         |
         | 功能:                  演示双击C/C++的debug下*.exe一闪而过的解决方案
          ------------------------------------------------------------------------------------------------------------------------*/  

        int main()
        {
            int a,b;
            int sum;

          
            cout << "Please enter two number: "<<endl;
            cin >> a>>b;
            sum=a+b;
            cout<<"The sum is "<<sum<<endl;
           
           
cin.clear(); // 如果这里没有 clear,那么下面的输入就被忽略了,因为cin标志未清除
            cin.ignore( numeric_limits<streamsize>::max(), '\n' ); // 清空输入流
            cin.get(); // 等待用户输入回车

            return 0;
        }


类别:学习积累 | 添加到搜藏 | 浏览() | 评论 (3)
 
最近读者:
 
网友评论:
1
2008-02-28 20:45 | 回复
cin.clear(); cin.ignore( numeric_limits::max(), '\n' ); 。 cin.get(); 最好能把这三个函数顺便也做个了解,可参阅:浅析cin.getline,cin.get,cin.ignore,cin.clear用法 一文,网上很多地儿有转,不多啰嗦!
 
2
2008-02-28 20:53 | 回复
也可以这么做,反正不就是为了查看输出吗,那就可以把标准输出重定向一下就OK了,比如可以在程序最前面加上一句: freopen("res.txt", "w", stdout), 这样所有的输出都到res.txt里了~~
 
3
2008-02-28 21:33 | 回复
二楼又给了我们一种方法,又它的优点也又不足之处。 以我的附例来讲:双击或用编译器时都不会看到:Please enter two number 这一句提示,对于这个程序不能显示此句无大碍,但是对于需要多次提示的或前后输入相关联的将会有很多麻烦! 当然能在屏显的同时将输入输出结果存储,也是我们新手练习的一个很有意义项目。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu