首页 > 编程语言 >C++快速入门 第三十二讲:assert函数和捕获异常

C++快速入门 第三十二讲:assert函数和捕获异常

时间:2023-08-18 15:11:35浏览次数:41  
标签:语句 try 函数 C++ assert num catch 第三十二

C语言和C++都有一个专门为调试而准备的工具函数---assert函数。这个函数是在assert.h库文件里定义的。

实例1:assert函数应用

 1 #include <cassert>
 2 //assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态
 3 //如果为真  Do nothing
 4 //如果为假  Do something 
 5 int main()
 6 {
 7     int i = 20;
 8     assert( i == 65);//如果括号内为真,则过;假则中断程序 
 9     
10     return 0;
11  } 

同样为了对付潜在的编程错误(尤其是在运行时的错误),捕获异常是一种完全不同的方法。简单说,异常就是与预期不相符合的反常现象。

注:每条try语句至少要有一条配对的catch语句。必须定义catch语句以便让它接收一个特定类型的参数。

当某个try语句块里执行过throw语句,它后面的所有语句(截止到这个try语句块末尾)将永远不会被执行。

如果try语句块无法找到一个与之匹配的catch语句块,它抛出的异常将中止程序的执行。

实例2:捕获异常(try,catch,throw)

 1 #include <iostream>
 2 #include <climits>
 3 
 4 using namespace std;
 5 unsigned long returnFactorial(unsigned short num) throw(const char*);
 6 
 7 int main()
 8 {
 9     unsigned short num = 0;
10     cout << "请输入一个整数:";
11     while( !(cin>>num) || (num < 1) )
12     {
13         cin.clear();//清楚状态
14         cin.ignore(100,'\n'); //清除缓存区
15         cout << "请输入一个整数:"; 
16     }
17     cin.ignore(100,'\n');
18     try
19     {
20         unsigned long factorial = returnFactorial(num);//如果异常,则抛出字符型的*e异常
21                                                        //直接跳转到catch继续执行 
22         cout << num << "的阶乘值是:" << factorial;
23     }
24     catch(const char *e)//如果正常则不执行,抛出异常则执行 
25     {
26         cout << "error";
27     }
28     return 0;
29 }
30 
31 unsigned long returnFactorial(unsigned short num) throw(const char*)
32 {
33     unsigned long sum = 1;
34     unsigned long max = ULONG_MAX;
35     
36     for(int i = 1;i <= num; i++)
37     {
38         sum *= i;
39         max /= i;
40     }
41     if(max < 1)
42     {
43         throw"悲催。。。该基数太大,无法在该计算机计算求出阶乘值。\n";
44     }
45     else
46     {
47         return sum;
48     }
49 }

标签:语句,try,函数,C++,assert,num,catch,第三十二
From: https://www.cnblogs.com/ybqjymy/p/17640576.html

相关文章

  • C++快速入门 第十八讲:访问控制
    访问控制:C++提供用来保护(保护意思是对谁可以调用某个方法和访问某一个属性加上一个限制)类里的方法和属性的手段实例1:访问级别应用1//级别允许谁来访问2//public任何代码3//protected这个类本身和它的子类4//private只有......
  • C++无法将类的成员函数赋值给一般的函数指针,解决方案
    遇到需要绑定回调函数的API接口。看了定义的函数指针,是静态的函数指针,将非静态的类成员函数赋值过去的时候,无法编译通过。将成员函数改成静态又得将整个类的内容都改成静态。这种情况下,可以构造匿名函数,引用this,这样可以在类中,将自己的成员函数赋值给需要的函数指针类型上:ser......
  • C++快速入门 第六讲:函数的重载
    函数重载:实质就是用同样的名字再定义一个有着不同参数类型及个数来实现不同操作的函数。实例1:改变同一函数的输入参数类型1#include<iostream>23voidconvertTemperature(doubletempIn,chartypeIn);4voidconvertTemperature(inttempIn,chartypeIn);5......
  • C++快速入门 第七讲:复杂的数据类型
    数组:可以把许多个同类型的值存储在同一变量名下实例1:输入的数据存储到数组中,并计算其和与平均值输出1#include<iostream>23usingnamespacestd;//使用作用域45intmain()6{7intarray[10];8inti;9intsum=0;10doubleaverage;......
  • C++快速入门 第八讲:复杂的数据类型——指针
    小知识:程序以文件的形式存储在硬盘,但它们却是在计算机的内存中运行对于变量可以通过变量名与地址两种方式进行索引,变量的地址在程序执行期间是不会发生变换的地址是计算机内存中的某个位置;指针是专门用来存放地址的特殊类型变量......
  • C++快速入门 第九讲:复杂的数据类型——指针02
    指针的类型必须与由它保存其地址的变量的类型一致,当某个变量的地址给了指针p时,就可以通过*p(即表示该地址的数据)来对该变量数据进行操作一定要牢记一个事实:指针所保存的是内存中的一个地址,它并不保存指向的数据的值本身。因此务必确保指针对应一个已经存在的变量或者一块已经分配......
  • C++快速入门 第十讲:复杂的数据类型——指针和数组
    计算机是把数组以一组连续的内存块保存的。数组的第一个元素的地址为该数组的基地址。实例1:数组元素地址打印1#include<iostream>23usingnamespacestd;45intmain()6{7constunsignedshortITEMS=5;8intintArray[ITEMS]={1,2,3,4,5}......
  • C++快速入门 第十一讲:结构
    结构是一种由程序员自己定义的、由其他变量类型组合而成的数据类型。其所能包含的变量的个数是没有限制的。实例1:简单数据库读写1#include<iostream>2#include<fstream>//文件操作3#include<windows.h>//为了使用Sleep()函数45structFishO......
  • C++快速入门 第十二讲:传值、传址和传引用
    实例1:值传递1#include<iostream>23voidchangeAge(intage,intnewAge);4intmain()5{6intage=24;//定义一个age,占一处地址7std::cout<<"Myageis"<<age<<"\n";89changeAge(age,ag......
  • C++快速入门 第二讲:从一个小程序说起
    cout(cout<<i表示变量i流向屏幕显示)是一个输出流对象,属于basic_ostream类的对象。ostream类在iostream头文件中定义。同理cin(回车后,键盘输入缓冲区内容流向cin流的内部缓冲区,cin>>xx操作便从这个缓冲区提取数据,即键盘输入流向程序)为输入流对象,C++标准库所使用的所有标识符(即类......