5.1 简单语句
空语句
别漏写分号,也别多写分号
复合语句
5.2 语句作用域 㑼
5.3 条件语句
悬垂else
使用花括号控制执行路径
switch语句
我们重点来看两个例子来说明case语句要注意的问题
// 计算每个元音字母并初始化计数值
unsigned ac =0 , ec =0 , ic =0, oc =0 ,uc =0;
char ch;
while(cin>>ch)
{
switch(ch)
{
case ‘a’:
++ac;
break;
case ‘e’:
++ec;
break;
case ‘i’:
++ic;
break;
case ‘o’:
++oc;
break;
case ‘u’:
++uc;
}
}
这个程序能够实现字母计数的功能取决于switch的逻辑。
1. case的标签必须是常量表达式
2. 任何两个case的标签值不能相同
3. 如果某个case标签匹配成功,将从该标签开始往后顺序执行所有语句。所以才有break语句。
可以看下面程序实现的功能:
unsigned vowelCnt =0 ;
// .. the same as above
switch (ch)
{
// a e i o or u , oen of them will be add 1
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
++vowelCnt;
break;
}
switch语句不允许绕过变量的初始化过程
case true:
string file_name;
int ival =0; // 错误:控制流可能绕过一个隐式初始化的变量
int jval ; // 正确,因为jval没有被初始化。(这个不是很理解埃)
case false:
jval = next_run(); //正确,给jval赋一个值
if(file_name.empty()) // file_name在作用域内但是没有被初始化
//…
// ….
不允许跨过变量的初始化语句直接跳转到该变量作用域的另一个位置
如果一定要在某个case分支定义并初始化一个变量,我们应该把变量定义在块内。从而保证后面case标签都在变量的作用于之外。
5.4 迭代语句
for 语句 范围for语句, while , do while语句,略
5.5 跳转语句
break , continue语句, goto语句 略
try语句块和异常处理
c++语言中,异常的处理包括:
throw表达式:异常检测部分使用throw表达式来表示它遇到的异常,我们说throw引发了异常。
try 语句块 异常处理部分使用try语句块处理异常,以关键字try开始,并以一个或多个catch子句结束
一套异常类用于在 throw表达式和catch子句表达式之间传递异常具体信息。
寻找异常处理代码的过程恰好与函数调用的过程相反,,当异常被抛出的时候,首先搜索抛出该异常的函数,如果没有找到可以匹配的catch子句,终止该函数,并在调用该函数的函数中继续寻找。以此类推,逐曾返回,知道找到对应的catch子句,如果最终没有找到,程序会非正常退出。
实际的异常编写代码非常的困难。
c++定义了一组异常类。可以在用户在编写程序的时候使用。