此笔记仅记录容易忘记的知识点,对于已经掌握或者比较容易的知识点,此笔记将不涉及。
5.1 简单语句
一个表达式,后边添加上;即是简单语句;需要注意以下几点内容:
- 分号问题:不要漏写也不要多写分号,一个语句后边多加一个分号有时候代表的是一个空语句(有时因为语法问题,需要添加空语句)
- 符合语句块:实际上就是for循环里面的{ }, 将要执行的语句使用{}括起来
5.2 语句作用域:
就是在if,switch,for,while等循环内定义的变量,仅在循环体内有用及可见。
5.3 条件语句:
5.3.1 条件语句 if:
- if,if-else,if-else if,注意在函数体内的语句使用{}括起来,以保证其能正确运行;
- 悬垂else: 当if语句中有多个else的情况,C++会自动匹配,将距离else最近的if匹配在一起,或者使用{}进行强制隔离
5.3.2 条件语句 switch:
- 注意:当switch语句中,满足其中一个case,那么若后边未添加case的时候,程序会自动执行后边所有的case;
- 因此注意break不要忘记;
- default 标签:若switch语句中,没有一个case可以匹配上,那么在后边添加一个default: 程序将会自动运行default指令。
- 尽量不要在switch的分支语句中添加变量定义和赋值初始化,容易出现作用域非法问题。
//switch语句
unsigned aCnt= 0, eCnt=0, iCnt=0, oCnt=0, uCnt=0;
char ch;
while(cin>>ch){
switch(ch){
case 'a':{
++aCnt;
break;
}
case 'e':{
++eCnt;
break;
}
case 'i':{
++iCnt;
break;
}
case 'o':{
++oCnt;
break;
}
case 'u':{
++uCnt;
break;
}
}
switch (ch){ //只需满足其中任意一个即可
case 'a':case 'e':case 'o':case 'u':
++vowelCnt;
break;
default:
cout<<"No match" ;
break;
}
}
5.4 迭代语句:
5.4.1 迭代语句 while:(进入循环体时,先进行判断,若为假,则不进入循环体)
5.4.2 传统for语句: 进入循环体前,先进行一次判断,true则进入,否则循环终止 :
- 从传统for循环执行过程:
- for语句头中可以进行多重定义:虽然可以多重定义对象,但是中间的判断语句只能对应一个对象
5.4.3 范围for语句: 一种简单的可以遍历容器或其他序列的所有元素 (注意!!要求遍历的是容器才可)
5.4.4 do while语句(与while很像,但是区别是:先执行一次循环,执行结束后再进行判断)
注意!!while();语句后边需要添加;才行
5.5 重要(跳转语句):break,continue,goto,return
5.5.1 break语句:
5.5.2 break语句:(负责终止离他最近的while,do while,for, switch语句)
5.5.2 continue语句:(终止最近的循环中的当前迭代,并立即开始下一次迭代,只能出现在for while do-while循环内)
5.5.3 goto语句:(立即无条件跳转到同一函数的另一条语句,尽可能不要使用,需要跳转到带标签语句)
5.6. try语句块和异常处理(重要!!)(throw,try,catch)
5.6.1 (1)throw表达式:程序的一场检测部分使用throw表达式引发一个异常,throw表达式包含 throw+表达式;
- 以下例子抛出的一场是runtime_error的对象,runtime_error是标准库的异常类型的一种,定义在stdexcept头文件中
例如:
Sales_item item1,item2;
cin>> item1>>item2;
if(item.isbn()==item2.isbn()){
cout << item1+item2<<endl;
return 0;
}else{
cerr<<"Data must refer to same ISBN";
return -1;
}
//使用throw可以改写为:
if(item1.isbn()!=item2.isbn()){
throw runtime_error ("Data must refer to same ISBN");
}
cout << item1+item2<<endl;
5.6.2 (2)try表达式:将尝试语句放在try内,catch语句来捕获异常情况。
例如:
Sales_item item1,item2;
//使用throw可以改写为:
while(cin>> item1>>item2){
try{
if(item1.isbn()!=item2.isbn()){
throw runtime_error ("Data must refer to same ISBN");
}
catch(runtime_error){
cout<<err.what();
<<"Try anain? y or n?" <<endl;
char c;
cin>>c;
if(!cin||c=='n'){
break;
}
}
}
5.6.3 标准异常