您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
第32讲-assert函数和捕获异常
发布时间:2021-05-20 14:20:18编辑:雪饮阅读()
assert斷言的使用
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
一個具體的實例如:
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int i=20;
assert(i==65);
return 0;
}
編譯運行結果如:
解決code blocks打開后上次項目丟失問題
最近使用code blocks經常出現每次打開后上次項目就不見了的情況。
還有就是每次退出的時候就一直窗體未響應狀態。
對於退出時候窗體未響應狀態,這個也是影響不大。
這裏介紹下code blocks打開后上次項目丟失問題。
在工具欄點擊“View”出現的二級菜單中勾選“Manager”
一般情況下此時原來的項目就會出來了。
如果還是沒有出來,則點擊這個open an existing project
這裏可能默認就定位到上次項目目錄中了,然後選擇code blocks項目文件(.cbp後綴)就可以將上次的項目打開了
關於.cbp:
该文件是由被称为代码块(code blocks)::一个免费的程序,这是在C ++的开发中使用生成的。这是XML格式,包括编译器的性能和构建都参与了开发过程中的其他文件中的设置。
然後就可以看到之前的項目了
C++ 异常处理
异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。
异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。
throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。
如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。
這裏還是用前面的階乘隱患修繕的程序進一步以異常處理的形式來加固實現,則一個實例如:
#include <iostream>
#include <climits>
class Factorial{
public:
Factorial(unsigned short num){
this->num=num;
};
//获取阶乘
unsigned long getFactorial(){
unsigned long sum=1;
for(int i=1;i<=num;i++){
sum*=i;
}
return sum;
};
void inRange(){
unsigned long max=ULONG_MAX;
for(int i=num;i>=1;--i){
max/=i;
}
if(max<1){
//抛出異常
throw "輸入的基數太大,無法在該計算機計算求出階乘值。\n";
}
}
private:
unsigned short num;
};
int main(){
unsigned short num=0;
std::cout<<"請輸入一個整數:";
std::cin>>num;
Factorial fac(num);
//用try執行可能帶有異常的語句
try{
fac.inRange();
std::cout<<num<<"的階乘值是"<<fac.getFactorial()<<"\n\n";
}
//用catch捕獲可能帶有異常的語句中所抛出的異常
catch(const char *e){
std::cout<<e;
}
return 0;
}
編譯並運行輸入一個較大的基數,就會將異常輸出:
請輸入一個整數:13
輸入的基數太大,無法在該計算機計算求出階乘值。
Process returned 0 (0x0) execution time : 2.789 s
Press any key to continue.
同樣的一個正常的基數就能正常計算出階乘:
請輸入一個整數:7
7的階乘值是5040
Process returned 0 (0x0) execution time : 1.928 s
Press any key to continue.
关键字词:assert,異常,捕獲
下一篇:第33讲-动态内存管理
相关文章
-
无相关信息