错误处理和调试——C++(31、32)

编译时错误(complie-time error)

TIPS

  • 培养并保持一种编程风格

  • 认真对待编译器给出的错误/警告信息

  • 写代码三思而后行(先画流程图)

  • 注意检查最基本的语法

  • 把可能有问题的代码行注释

  • 换一个环境或开发工具试试

  • 检查自己是否已经把所有必要的头文件全部include进来

  • 留意变量的作用域和命名空间

  • 休息一下

  • 使用调试工具

运行时错误

这时的错误往往倾向于逻辑漏洞,而不是语法错误。

避免错误的另一个好方法就是把调试好的代码另外保存起来并不再改动它,然后把代码划分成各个模块,用它们来搭建新的应用程序。

TIPS

  • 培养保持良好编程风格

  • 多用注释,用好注释

  • 注意操作符的优先级

  • 不要忘记对用户输入和文件输入进行合理性检查

  • 不要做任何假设,想当然

  • 把程序划分成一些比较小的单元模块来测试

让函数返回错误代码

由来

  • 当我们在使用之前的阶乘函数时,从13开始,数值发生错误,原因是我们的计算数值已经超出了给定空间所能存储的最大值。这时候我们就要使用一些方法让使用者知道这个问题。

climits头文件

  • 这个头文件是从C的 limits.h 头文件引用过来的。
  • 它主要列出了各种数据类型在给定操作系统上的取值范围
  • 它讲每种数据类型的最大可能值和最小可能值都分别定义为一个常量供我们比较

如:

SHORT_MAX-----短整数数据类型在给定操作系统上的最大可能值
SHOUR_MIN-----...

USHORT_MAX----无符号整数类型的最大可能值( unsigned short 的最大值)

编程思考

在C++语言中,for循环对比while循环来说有一定的优势。(C++可以在任何地方声明变量)

比如,当我们对一个输入的值num进行求阶乘,而且为了保证代码的稳定性,我们不希望对输入的num值进行改变。
我们用for循环的话
for(int i=num,i<0;i++)...

我们用whlile循环的话,
int i=num;
while(i)...

当代码过多的时候,for循环语句还是占优势的。

代码实现

#include <iostream>
#include <climits>

using namespace std;

class Factorial
{
public:
     Factorial( unsigned short in );
     unsigned long get_Factorial();
     bool inrange();
private:
    unsigned short num;
};

Factorial::Factorial( unsigned short  in)
{
    num=in;
}
unsigned long Factorial::get_Factorial()
{
    unsigned long sum=1;
//在这里可以看出for循环的优势!!
    for(int i=num;i>0;i--)
    {
        sum*=i;
    }
  /*  unsigned int thenum=num;
    while(thenum)
    {
        sum*=thenum;
        thenum--;
    }*/
    return sum;
}
bool Factorial::inrange()
{
    unsigned long themax=ULONG_MAX;
    for(int i=num;i>0;i--)
    {
        themax/=i;
    }

    if(themax==0)
        return false;
    else
        return true;
}


int main()
{
    unsigned short temp;
    cout << "请输入一个数值..." << endl;
    cin >> temp;

    Factorial a(temp);

    if(!a.inrange())
    cout << "数值过大" << endl;
    else
        cout << a.get_Factorial() <<endl;



    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

la via

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值