<C++primer> 学习笔记【第五章】

目录

5.1  简单语句

空语句

复合语句/块

5.2  语句作用域

5.3  条件语句

if语句

不含else分支

含else分支

悬垂else

switch语句

5.4  迭代语句

while语句

for语句

do  while语句

5.5  跳转语句

break语句

continue语句

goto语句(不用)

return语句(不在这介绍)

5.6  try语句块和异常处理

异常处理机制介绍

标准异常

throw表达式

try语句块

典例:


 

5.1  简单语句

空语句

只写一个分号为一个空语句

复合语句/块

用花括号包括一系列语句,用作一条语句

5.2  语句作用域

while(int i=get_num())
{
    int j=i;
}

如上图,每次迭代,i和j重新初始化 ,再消除

5.3  条件语句

if语句

不含else分支

含else分支

悬垂else

指else与它最近的if匹配

if()//#1
    /* ...*/
    if()//#2
    /* ...*/
else
/* ...*/

上图中,else与#2if匹配

if()
{
    /* ...*/
    if()
    /* ...*/
}
else
/* ...*/

 上图中,else与#1 if匹配

switch语句

格式  swtich(expression)

为expression求值,并根据不同case给出的值对应expression的值匹配

格式  case 标签:

标签必须是整型常量表达式(包括char),不能是变量,并且该表达式只能表达一个值,不能用逻辑关系式||或&&

default表示默认情况(即除了case)

若每个case没有break,则继续往下执行;有时候想要不同case共享操作,则可以最后写break如:

case'A':
case'B':
     ++cnt;
     break;
case'C':
    break;

switch内部变量定义 

如果想在case内定义并初始化变量,则需要在这个case内用块包含定义的变量,则该变量作用域即为这个块内

case true:
    {
        string file_name=get_file_name();
    }
    break;
case false:
    if(file_name.empty())//错误,file_name不在该作用域之内

典例 

5.4  迭代语句

while语句

适用场景:条件不变,重复执行或者不确定重复多少次

for语句

传统for语句:

适用场景:有迭代器参与或下标参与

范围for语句:

适用场景:遍历容器内所有元素

do  while语句

适用场景:先执行再判断条件,除此之外与while相似

格式(注意condition使用的变量需要定义在循环体之外,因为该变量很有可能存在statement中)

do
  statement
while(condition);

5.5  跳转语句

break语句

负责终止离它最近循环结构(for,while,do while)或switch语句,从这些语句之后的下一条开始继续执行

continue语句

负责终止最近的循环中的当前迭代,并立即开始下一次迭代

goto语句(不用)

return语句(不在这介绍)

5.6  try语句块和异常处理

异常处理机制介绍

包括异常检测异常处理

异常处理三部分:throw异常检测语句,try语句块,异常类

标准异常

throw表达式

格式:

throw 错误类型表达式;

try语句块

格式

try
{
    program-statement;
}
catch(异常声明)
{
   handle-statement;
}
catch(异常声明)
{
   handle-statement;
}

program-statement:正常的程序,包含throw

异常声明,即声明一个对象(可能未命名)

handle-statement:解决的方法

当throw检测出异常,检索该异常对应的catch:

若对应上,则执行该catch块内语句,执行完后,跳转到try语句块的最后一个catch语句之后的那条语句继续执行

若对应不上,则程序转到名为terminate的标准库函数,一般执行该函数会导致程序非正常退出

典例:

#include<iostream>
#include<stdexcept>
using std::cout;
using std::endl;
using std::cin;

int main()
{
	int n1, n2;
	char c;
	while (cin >> n1 >> n2)
	{
	try
	{
		if (n2 == 0)
			throw std::runtime_error("除数为0");
		else
			cout << static_cast<double>(n1) / n2 << endl;
	}
	catch (std::runtime_error err)
	{
		cout << err.what() << endl;
		cout << "是否要重新输入?Enter 'y' or 'n' " << endl;
		cin >> c;
		if (!cin || c == 'n')
			break;
		else
		{
			cout << "please enter again two correct numbers:" << endl;
		}

	}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值