5.1 简单语句
1.在一个表达式的末尾加上分号就是表达式语句,该表达式丢弃了表达式的求值结果。
1+2;
2.一个单独的分号,是空语句,可以用占位,或者某些语句语法上需要一个语句,但是实现时,已经在其他的部分完成了操作时使用。
;;;;;
3.复合语句,复合语句就是用花括号括起来的语句和声明的序列。复合语句也叫做块,一个块为一个作用域,在块中定义的变量的作用域为声明这个变量开始的地方到块结束。
{
}
注意块的结尾没有分号;如果你写上了,表示就是多了一个空语句。
- 空块相当于空语句
练习
5.1.
空语句就是一个分号,或者一对空的花括号,前面没有加任何的表达式。
当一个语句在语法上需要一个语句,但是在逻辑上已经该语句已经不需要任何操作时,可以用空语句
5.2
块就是一对花括号括起来的一系列语句,用到块的地方挺多的,其中一个例子就是:循环、条件等语句下,逻辑上需要执行多个操作时,可以使用块语句。
5.3
while (val <= 10 && (sum += val,++val)) {
}
花里胡哨,可读性下降了不少
5.2 语句作用域
块中定义的变量的访问返回是从定义该变量开始的位置,到块结束。
练习
5.4
a。
string::iterator iter;
while(iter!=s.end()){
//todo
}
b.
bool status;
while(status=find(word)){
//todo
}
if(!status){
//todo
}
5.2 条件语句
c++中有if和switch两种条件语句
对于if条件语句,有if()和if() else两种形式,()中的内容需要能够转化为布尔类型
因为存在悬垂else的问题,所以最好在if else的每个语句后面,都加上块作用域,这样提升了可读性,能够避免一些错误。
什么是悬垂else,因为if条件语句,可以写else,也可以不写,所以else和哪个if匹配就存在问题,C++遵循的是,和最近的那个没被匹配的if语句进行匹配。
if(a==1)
if (b==2)
//to
else
//todo
这里的todo其实匹配的是后面的那个if,所以为了避免悬垂else,在if,else语句后面都加上块作用域,是一个非常好的选择。
练习
5.7
a。少写了分号
b。加上一个块作用域
c。ival定义在了if中,
d。将=用成了==
5.8
悬垂else就是else的匹配问题,C++规定else匹配最近的没有被匹配的if。
switch
switch(…){case xx;}
switch语句需要在()中输入整型表达式,同样的case标签也必须为整型常量表达式,标签不可以重复。
switch语句将()中的内容,与定义的多个case标签进行匹配,从匹配的case标签开始,向下执行所有语句,直到遇到break语句为止。
int socre =1;
int a,b,c;
a=b=c=0
switch(score){
case 1:
++a;
case 2:
++b;
case 3:
++c;
break
default:
;
break;
}
上述的语句会从++a,++b,++c一直执行到break位置,一般情况下,每一个case标签下都有一个break
default表示如果()中的内容和所有的case标签都不匹配则执行该项。
case中可以定义变量,但是如果定义的变量的初始化和使用不在同一个case标签的范围下,则会报错
int score = 1;
switch (score) {
case 1:
int j = 0;
cout << 1 << endl;
break;
case 2:
j = 1;
cout << 2