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




