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

来源:互联网 发布:sql重复数据只取一条 编辑:程序博客网 时间:2024/04/28 17:31
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++的几种语句,大多数是控制流语句。重点了解异常处理部分。





0 0
原创粉丝点击