CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C异常:在控制台程序中如果出现除数为零时,系统会抛出什么类型的异常?

楼主guchanfeng2003()2005-08-01 22:20:31 在 C/C++ / C++ 语言 提问

C异常:在控制台程序中如果出现除数为零时,系统会抛出什么类型的异常?  
   
  #include   <iostream.h>  
  void   main()  
  {  
        try  
        {  
              int   a,b;  
              cin   >>   a   >>   b;  
              cout   <<   a/b   <<   endl;  
        }  
        catch(?)     //此处?应该是什么具体异常类型,不要说三点...  
      {  
        }  
  } 问题点数:10、回复次数:3Top

1 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-08-01 23:16:27 得分 5

问操作系统,问CPU去,这个和C++异常无关  
   
  #include<windows.h>  
  #include<iostream>  
  using   namespace   std;  
   
  int   main()  
  {  
   
          __try  
          {  
                    int   i=0;  
                    i   /=   i;  
          }  
          __except(EXCEPTION_EXECUTE_HANDLER)  
          {  
                cout<<"除数为0"<<endl;  
          }  
  }Top

2 楼guchanfeng2003()回复于 2005-08-02 00:23:46 得分 0

I   see  
  原来当异常发生时,CPU发出异常信号,操作系统和某语言程序的运行时程序调用了回调函数对异常进行转换,转换成该种语言的异常类型.也就是为什么VB,JAVA中能自动抛出异常类型而能够捕捉.  
    Jinhao(辣子鸡丁)你认为我说得对吗?Top

3 楼bluejugar(2046,那年我64.)回复于 2005-08-02 00:54:35 得分 5

引用一篇文章:  
  (来自风中的刀)  
  关于   被0除   异常的捕获!    
  默认情况下,系统屏蔽了浮点数/整数运算时的异常错误,并以0或者无穷大表示结果,并不会产生异常。  
   
  这些数值计算异常列表如下:  
   
  _EM_INVALID    
   
  _EM_DENORMAL  
   
  _EM_ZERODIVIDE  
   
  _EM_OVERFLOW  
   
  _EM_UNDERFLOW  
   
  _EM_INEXACT  
   
  为了捕获上述异常,必须使用   _controlfp(...)/_control87(...)   运行库函数设置相关的屏蔽位,代码示例如下:  
   
     
   
  //   ZeroDivide.cpp   :   By   YangTze!  
  //  
   
  #include   "stdafx.h"  
   
  #include   <WINDOWS.H>  
  #include   <STDIO.H>  
  #include   <FLOAT.H>  
   
  void   TestFunc()  
  {  
          int   i   =   888;  
          int   j   =   0;  
   
          __try   {  
                  i   =   i/j;  
          }  
          __except(   GetExceptionCode()   ==   EXCEPTION_INT_DIVIDE_BY_ZERO   ?   EXCEPTION_EXECUTE_HANDLER   :   EXCEPTION_CONTINUE_SEARCH   )   {  
                  MessageBox(   NULL,"EXCEPTION_INT_DIVIDE_BY_ZERO!","Error!",MB_OK   );  
          }  
  }  
   
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
          unsigned   int   nOldMask;  
          unsigned   int   nNewMask;  
   
          nOldMask   =   _controlfp(   0,0   );  
          nNewMask   =   (   (   nOldMask   &   ~_EM_ZERODIVIDE   )   |   (   _EM_ZERODIVIDE   &   _MCW_EM   )   );  
          _controlfp(   nNewMask,_MCW_EM   );  
   
          TestFunc();  
   
          _controlfp(   _CW_DEFAULT,   0xfffff   );  
   
          return   0;  
  }  
   
  Top

相关问题

  • c#控制台程序一问
  • C#控制台自动关闭问题
  • c#调用控制台程序
  • c++ build 异常问题
  • c++异常处理问题
  • C++Bulider异常定义
  • 异常捕捉问题(C#)
  • C++如何使用异常?
  • c/s连接异常处理
  • C++的异常捕捉

关键词

  • controlfp
  • noldmask
  • nnewmask
  • em
  • exception
  • try
  • include

得分解答快速导航

  • 帖主:guchanfeng2003
  • Jinhao
  • bluejugar

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo