本篇我们一起看一下c++中常见的控制结构语句,如果接触过其他的语言,那么这些东西都大同小异,没有什么特变注意的。主要了解一下相关的语法即可。
在开始之前我们先来了解一个概念:语句块。
语句块简单来说就是在程序中包括在花括号{}中,每条之间使用分号分割的一段代码块。使用语句块的目的就是合理的组织我们的程序,要知道程序不仅仅是顺序执行的,在程序执行过程中我们需要根据不同的情况执行不同的代码,此时我们就需要能够区分这些不同的代码。
条件结构
条件结构用来执行仅在满足特定条件的情况下才执行的一条语句或者一个语句块。
语法形式:
if(condition) statement复制代码
if(condition){stament block}复制代码
第一种写法只有我们在满足条件condition的情况下并且我们的处理语句只有一句代码的情况下使用。 个人建议统一使用{}形式包括我们的代码,根据个人喜好,并没有强制性的要求。
既然有if关键字用来标识在满足特定条件执行的代码,那么对应的就有不满足该特定条件下该怎么执行程序。
我们可以使用else关键字来指定不满足条件的情况下需要执行的代码。 在实际编写代码的过程中,我们会遇到更为复杂的情况,比如我们需要同时判断很多条件,就拿考试成绩来说,我们把80-100的成绩归类为优秀,60-80归类为及格,小于60归类为不及格。
按照我们刚才说的,我们可以使用3个if语句来实现这个情况,但是如果使用if{}else{}很明显不能够满足我们的要求, 这里我们就需要知道else if,话不多说,看个例子大家就明白了。
float score1 = 70; if (score1 >= 80) { cout << "优秀"; } else if (score1 < 80 && score1 >= 60) { cout << "及格"; } else { cout << "不及格"; }复制代码
循环结构
循环结构就是用来执行一段重复的代码块的。当然了,我们需要提供一定的条件能够让程序知道在什么情况下完成代码的执行。
常见的循环结构有for,while,do...while三种,下面我们通过代码来看下具体的写法。
int count = 0; for (count = 8; count < 10; count++) { cout << "for:" << count << endl; } cout << "current count:" << count << endl; while (count < 12) { cout << "while:" << count << endl; count++; } cout << "current count:" << count << endl; do { cout << "do...while:" << count << endl; count++; } while (count < 12);复制代码
输出结果:
for:8for:9current count:10while:10while:11current count:12do...while:12复制代码
对于for循环我们可以将圆括号内的内容分为三部分,语句之间使用分号隔开。 "count= 8" 我们称之为初始化语句,"count++"称之为增值语句,"count<10"自然是条件语句了,也就是说只有满足条件语句,for代码块里面的代码才会执行。
在有些情况下,我们可以省略初始化和增值语句,但是分号是必不可少的。更极端的情况下我们可以把for用作死循环,至于什么时候终止执行则在代码块内完成判断。看个例子:
int count = 0; for (; count < 2;) { cout << count << endl; count++; } cout << "current count:" << count << endl; for (;;) { if (count++ < 4) { cout << "for:" << count << endl; } else { break; } }复制代码
另外需要说明一下do...while结构,大家仔细看看第一个演示代码,我们设定的代码执行条件是count < 12,但是进入这个语句的时候count 已经是12了,很显然不满足我们的条件,但是代码还是执行了一次。这就是do...while结构的特性,不管是否满足条件,它怎么执行一次代码块。其实大家想想也就理解了,谁让while语句在后面写着了。。。很显然的先执行在判断。
分支控制和跳转
常见的有continue,break,goto三种。
continue语句用来跳过当前循环中剩下的代码而进入下一次循环,break和goto的作用恰恰相反,break和goto用来在循环没有结束之前,根据特定的条件结束循环。
先来看看continue和break:
for (int i = 0; i < 10; i++) { if (i < 3) { continue; } cout << "大于2" << endl; if (i == 3) { cout << "结束了" << endl; break; } }复制代码
输出:
大于2结束了复制代码
至于goto最为特殊,程序员对这个是又爱又恨,甚至有人认为在代码中使用过多goto是一场灾难,它会使我们的代码变得难以阅读和维护。当然了,只有我们不乱用,goto还是可以带给我们一些很奇妙的体验的。
我们直接通过代码来看下程序中怎么使用goto
int index = 0;loop: cout << index++ << endl; if (index < 2) { goto loop; } cout << "goto end" << endl;复制代码
这里我们要注意loop这个单词,显然这不是我们常见的c++关键字。在使用goto时,我们需要知道我们到底要从哪里go,to到哪了。loop加冒号:就是一个标识符,用在goto关键词后面,相当于goto的参数, 告诉goto你应该来我们这里。当然了,千万不要用c++保留的关键字。
选择结构 switch语句用来对一个表达式检查多个可能的常量值。我们先来看看它的语法:
swith(condition){case constant1:break;case constant2:break;default:break;}复制代码
看个例子:
int a = 0; switch (a) { case 0: cout << "我没有break" << endl; case 1: cout << "hello" << endl; break; case 10: cout << "word" << endl; break; default:break;复制代码
输出:
我没有breakhello复制代码
这里我们需要注意的一点就是如果我们没有和表达式匹配的值,那么就会执行default处的代码。
如果一个case条件下面的代码语句没有break,那么代码不会立即停止执行,而是会向下继续执行,直到遇见break后停止。