【重学《C++Primer第四版》】第六章、语句

Details of knowledge
1.break语句:直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试

  continue语句:导致最近的循环语句的当次迭代提前结束。


Questionable Examples
1. string s1,s2;
while(cin>>s1>>s2)
cout<<s1<<"     "<<s2<<endl;
这个while循环里面每次都要读入两个字符串,如果输入字符串的个数是奇数,那么程序会停在这里,等待下一个的输入。


Concrete Explanation
1.continue实例

输出1~100之间的不能被7整除的数。

for (int i=1; i<=100; i++)
	{
		if (i%7==0)
	continue;
	cout << i << endl;
	}
2.try-catch-catch...

实例1:

#include<iostream>                                 //包含头文件
#include<cstdlib>									//exit函数包含在cstdlib中
using namespace std;

double fuc(double x, double y)                        //定义函数
{
    if(y==0)
    {
        throw y;                                    //除数为0,抛出异常,抛出异常之后func函数直接结束 
    }
    return x/y;                                    //否则返回两个数的商
}

int main()
{
	double res;
    try                                            //定义异常
    {
        res=fuc(2,3);
        cout<<"The result of x/y is : "<<res<<endl;
        res=fuc(4,0);                                //出现异常
    }
    catch(int& value)                                    //捕获并处理异常
    {
        cerr<<"error of dividing zero.\n";
        exit(1);                                    //异常退出程序
    }
	catch(double& value)                                    //捕获并处理异常
    {
        cerr<<"error of dividing zero.\n";
        exit(2);                                    //异常退出程序
    }
    return 0;
}
如果没有一个catch和tay里面throw的异常匹配,那么就调用默认的终止函数terminate()来终止程序的运行。
实例2:

#include<iostream>                                 //包含头文件
#include<cstdlib>									//exit函数包含在cstdlib中
#include<stdexcept>
using namespace std;

double fuc(double x, double y)                        //定义函数
{
    if(x>y)
    {
        throw runtime_error("aaa");                                    //除数为0,抛出异常,抛出异常之后func函数直接结束 
    }
    return x;                                    //否则返回两个数的商
}

int main()
{
	double res;
    try                                            //定义异常
    {
        res=fuc(2,3);
        cout<<res<<endl;
        res=fuc(4,0);                                //出现异常
    }
	catch(runtime_error& value)                                    //捕获并处理异常,注意类型的匹配,若抛出的异常为runtime_error,那么catch应该捕获runtime_error,否则捕获不到
    {
        cerr<<"runtime_error:aaa.\n";
        exit(2);                                    //异常退出程序
    }
    return 0;
}
runtime_error是一个标准异常类,C++标准库定义了一组类,用于报告在标准库中的函数遇到的问题。这一组类定义在四个头文件中,分别是<exception>,<stdexcept>,<new>,<type_info>。
stdexcept中定义的标准异常类有:
exception,最常见的问题。
runtime_error,运行时错误,仅在运行时才能检测到的问题。
range_error,运行时错误,生成的结果超出了有意义的值域范围
overflow_error,运行时错误,计算上溢
underflow_error,运行时错误,计算下溢
logic_error,逻辑错误,可在运行前检测到的问题
domain_error,逻辑错误,参数的结果值不存在
invalid_argument,逻辑错误,不合适的参数
length_error,逻辑错误,试图生成一个超出该类型最大长度的对象
out_of_range,逻辑错误,使用一个超出逻辑范围的值。


Summary
本章主要讲了C++的几种语句,大多数是控制流语句。重点了解异常处理部分。





©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值