C语言基础知识2

孞㐑¥ 2024-08-30 14:05:02 阅读 58

一、算数操作符

C语⾔中有⼀组操作符叫:算术操作符。分别是: +  -  *  \  % ,这些操作符都是双⽬操作符。

注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。

(1)+ 和 -

+ 和 - ⽤来完成加法和减法。

+ 和 - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符。

(2)*

运算符 * ⽤来完成乘法。

(3)/

运算符 / ⽤来完成除法。

除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。

注:尽管变量 f 的类型是 float (浮点数),但是 10 / 3 得到的结果是 3.000000,而不是3.333...。原因就在于C语⾔里面的整数除法是整除,只会返回整数部分,丢弃小数部分。如果希望得到浮点数的结果,两个运算数必须至少有⼀个浮点数,这时C语言就会进行浮点数除法。

例如:

(4)%

运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。

二、赋值操作符

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。赋值操作符 = 是⼀个随时可以给变量赋值的操作符。

(1)连续赋值

赋值操作符也可以连续赋值,如:

(2)复合赋值符

在C语言中,我们可以通过复合赋值符更加方便的实现一个变量的自增,自减等运算。例如:

C语言中提供了复合赋值符,方便我们编写代码,这些赋值符有:

三、单目运算符

C语言中有⼀些操作符只有⼀个操作数,被称为单目操作符。 ++、--、+(正)、-(负) 就是单目操作符。

(1)++ 和 --

++是⼀种⾃增的操作符,又分为前置++和后置++,--是一种自减的操作符,也分为前置--和后置--

(1)前置++:先加一,后使用。

在这个代码中,变量a先进行++运算(自增一),在赋值给b。相当于下图代码。

(2)后置++:先使用,后加一。

在这个代码中,变量a先赋值给b,在进行自加运算。相当于下图代码。

(3)前置--:先自减,在使用。

在这个代码中,变量a先进行--运算(自减一),在赋值给b。相当于下图代码。

(4)后置--:先使用,在自减。

在这个代码中,变量a先赋值给b,在进行自减运算。相当于下图代码。

(2)+和-

这⾥的+是正号,-是负号,都是单⽬操作符。

运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

运算符 - 用来改变⼀个值的正负号,负数的前面加上 - 就会得到正数,正数的前⾯加上 - 会得到负数。

四、强制类型转换

正常情况下,当我们赋的值和变量类型不一样时,编译器会报警告。为了消除这个警告,我们可以使用强制类型转换。格式如下:(类型),使用方法如下:

五、scanf和printf介绍(补之前)

(1)printf

(1.1)基本用法

printf() 的作用是将参数文本输出到屏幕。它名字里面的 f 代表 format (格式化),表示可以

定制输出文本的格式。printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。

注:printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这

个头⽂件。

(1.2)占位符

printf() 可以在输出⽂本中指定占位符。所谓“占位符”,就是这个位置可以⽤其他值代⼊。例如:

上⾯⽰例中, num = %d  是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这⾥代⼊的值必须是⼀个整数。printf() 的第⼆个参数就是替换占位符的值(num = %d 是第一个参数,后面的num是第二个参数),上⾯的例⼦是整数 0 替换 %d 。执⾏后的输出结果就是 num = 0 。

常⽤的占位符除了 %d ,还有 %s 表⽰代⼊的是字符串。

上⾯⽰例中, %s 表⽰代⼊的是⼀个字符串,所以 printf() 的第⼆个参数就必须是字符串,这个例⼦是 hello world 。执⾏后的输出就是 hello world 。

输出⽂本⾥⾯可以使⽤多个占位符。

printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 

1 个(最开始的双引号中的数据也算是一个参数)。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

(1.3)占位符列举

printf() 的占位符有许多种类,与C语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位符

• %a :⼗六进制浮点数,字⺟输出为⼩写。

• %A :⼗六进制浮点数,字⺟输出为⼤写。

• %c :字符。

• %d :⼗进制整数。

• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。

• %i :整数,基本等同于 %d 。

• %f :⼩数(包含 float 类型和 double 类型)。

• %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e

为⼩写。

• %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。

• %hd :⼗进制 short int 类型。

• %ho :⼋进制 short int 类型。

• %hx :⼗六进制 short int 类型。

• %hu :unsigned short int 类型。

• %ld :⼗进制 long int 类型。

• %lo :⼋进制 long int 类型。

• %lx :⼗六进制 long int 类型。

• %lu :unsigned long int 类型。

• %lld :⼗进制 long long int 类型。

• %llo :⼋进制 long long int 类型。

• %llx :⼗六进制 long long int 类型。

• %llu :unsigned long long int类型。

• %Le :科学计数法表⽰的 long double 类型浮点数。

• %Lf :long double 类型浮点数。

• %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

• %o :⼋进制整数。

• %p :指针。

• %s :字符串。

• %u :⽆符号整数(unsigned int)。

• %x :⼗六进制整数。

• %zd : size_t 类型。

• %% :输出⼀个百分号。

(1.4)输出格式

printf() 可以定制占位符的输出格式。

(1.4.1)限定宽度

printf() 允许限定占位符的最⼩宽度。

上⾯⽰例中, %5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。如果想把空格用零替代,可以在占位符的%的后面加一个0。

对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度。

上⾯⽰例中, %10f 表⽰输出的浮点数最少要占据10位。由于⼩数的默认显⽰精度是⼩数点后6位,所以 3.3 输出结果的头部会添加2个空格。

(1.4.2)显示正负号

默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可以在占位符的 % 后⾯加⼀个 + 。

上⾯⽰例中, %+d 可以确保输出的数值,总是带有正负号。

(1.4.3)限定小数位数

输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写成 %.2f 。

基本格式为 % . (数字) f ,希望保留几位小数,数字就为几。这种写法可以与限定宽度占位符,结合使⽤。

最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。

(1.4.4)输出部分字符串

%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度。

(2)scanf

当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数,如果需要将变量的值输出在屏幕上的时候可以使⽤ prinf 函数。例如:

(2.1)基本用法

scanf() 函数⽤于读取⽤⼾的键盘输⼊。

程序运⾏到这个语句时,会停下来,等待⽤⼾从键盘输⼊。

⽤⼾输⼊数据、按下回⻋键后, scanf() 就会处理⽤⼾的输⼊,将其存⼊变量。它的原型定义在头⽂件 stdio.h 。scanf() 的语法跟 printf() 类似。

基本格式为:scanf("%d",&num);

它的第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符(与 printf() 的占位符基本⼀致),告诉编译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。这是因为C语⾔的数据都是有类型的, scanf() 必须提前知道⽤⼾输⼊的数据类型,才能处理数据。

它的其余参数就是存放⽤⼾输⼊的变量,格式字符串⾥⾯有多少个占位符,就有多少个变量。

上⾯⽰例中, scanf() 的第⼀个参数 %d ,表⽰⽤⼾输⼊的应该是⼀个整数。 %d 就是⼀个占位符, % 是占位符的标志, d 表⽰整数。第⼆个参数 &num表⽰,将⽤⼾从键盘输⼊的整数存⼊变量num中。

注意:变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址,即将变量 num 的地址指向⽤⼾输⼊的值。如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符。

上⾯⽰例中,格式字符串 %d  %d  %f  %f ,表⽰⽤⼾输⼊的前两个是整数,后两个是浮点数,⽐如 1 -1 3.4  6.6 。这四个值依次放⼊ num1 、 num2 、 num3 、 num4 四个变量。

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响 scanf() 解读数据。另外,⽤⼾使⽤回⻋键,将输⼊分成⼏⾏,也不影响解读。

上⾯⽰例中, scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 。

第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的# 不属于浮点数的有效字符,所以会停在这⾥。

(2.2)scanf的返回值

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。

如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF。

我们先演示正常情况:

如果输⼊1个数后,按 ctrl+z ,提前结束输⼊:

在VS环境中按3次 ctrl+z ,才结束了输⼊,我们可以看到r是1,表⽰正确读取了1个数值。如果⼀个数字都不输⼊,直接按3次 ctrl+z ,输出的r是-1,也就是EOF。

(2.3)占位符

scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。

• %c :字符。

• %d :整数。

• %f : float 类型浮点数。

• %lf : double 类型浮点数。

• %Lf : long double 类型浮点数。

• %s :字符串。

• %[ ] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会

停⽌。

上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。

如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表⽰跳过零个或多个空⽩字符。

下⾯要特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \0 。scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。

上⾯⽰例中,ch 是⼀个⻓度为20的字符数组, scanf() 的占位符 %19s 表⽰最多读取⽤⼾输⼊的19个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险了。(读取十九个是因为字符串末尾还会存储一个 \0 )。

(2.4)赋值忽略符

有时,⽤⼾的输⼊可能不符合预定的格式。为了避免这种情况, scanf() 提供了⼀个赋值忽略符 * 。只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

上⾯⽰例中,如果⽤⼾输⼊ 2020-01-01 ,就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。

上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的变量,解读后不必返回。

六、if语句

(1)if

if语句的语法形式如下:

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是不是0,则语句执⾏。

(2)else

上述代码中,如果输入结果不是1,我们想打印另一个语句,该怎么办呢?

这⾥就需要 if...else... 语句了,语法形式如下:

(3)分支中包含多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句。例如:

上面的例子中,不管num是不是 1,“输入的数不是一”这句话都会被打印。

这是因为 if 语句只能控制⼀条语句,就是 printf("输入的数是一\n"); ,if语句为真,则打印“输入的数是一”,if语句为假,则不打印,对于 printf("输入的数不是一\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来,else后也可以跟上⼤括号。如下:

(4)嵌套if

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。例如:

(5)悬空else问题

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

上面这段代码运行的结果是什么呢?

从图中可以看出,输出的结果是:啥都不输出。

为什么呢?

这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。

如果代码改成下⾯这样就更加容易理解了。

七、关系操作符

C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个。

• >  ⼤于运算符

• <  ⼩于运算符

• >=  ⼤于等于运算符

• <=  ⼩于等于运算符

• ==  相等运算符

• !=  不相等运算符

关系表达式通常返回 0 或 1 ,表⽰真假。

C语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 10 > 5 返回 1 , 5 > 10 返回 0 。关系表达式常⽤于 if 或 while 结构。

注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。

上面代码中的 hello 之所以能打印出来是因为 if 中的表达式的意思是将 1 赋值给 a ,所以表达式的结果是 1 ,1为真,if 语句执行。

另⼀个需要避免的错误是:多个关系运算符不宜连⽤。

i < j < k

上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。

(i < j) < k

上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j的值是否在 i 和 k 之间,应该使⽤下⾯的写法。

i < j && j < k

八、条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

例如:(求两个数的较大值)

九、逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

• ! :逻辑取反运算符(改变单个表达式的真假)。

• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

(1)逻辑取反运算符

如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真。

(2)与运算符

&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。

(3)或运算符

||  就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 

两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

(4)短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。例如:

上述代码中,如果num大于 20 左边操作数的结果是 0 ,即使这个数大于 10 右边的操作数也不会进行判断。

对于 || 操作符来说,|| 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。例如:

上述代码中,如果num等于 1,就不用判断是否等于 10。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。

十、switch语句

switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重

的 else if 改成更易⽤、可读性更好的形式。基本格式为:

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。

注:

• switch 后的 expression 必须是整型表达式

• case 后的值,必须是整形常量表达式

(1)if语句和switch语句的对比

例如想知道星期几,用 if 语句:

用 switch 语句

上述的代码中,我们要注意的点有:

1. case 和后边的数字之间必须有空格

2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

(2)switch语句中的break

前⾯的代码中,如果我们去掉case语句中的break,将出现下面情况

我们发现本来应该只输出星期六的,但这里多输出了星期日和输入错误。这是为什么呢?

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

(3)switch语句中的default

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default 。

就⽐如前⾯的打印星期的代码,如果 num 的输⼊不是1~7的值,我们就可以用 default 提⽰:输⼊错误。

(4)switch语句中的case和default的顺序问题

在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。

十一、while循环

(1)while语句的执行流程

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

(2)while循环的演示

十二、for循环

(1)基本格式

for 循环的语法形式如下:

表达式1:⽤于循环变量的初始化

表达式2:⽤于循环结束条件的判断

表达式3:⽤于循环变量的调整

(2)执行流程

⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

(3)for循环演示

十三、do-while循环

(1)基本格式

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳

出循环;⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

(2)执行流程

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

(3)do-while循环演示

十四、break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了 break 和 continue 两个关键字,就是应该到循环中的。

• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执

⾏。

• continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所

差异的。

(1)while循环中的break和continue

(1.1)break

打印了 0,1,2后,当num等于3的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。

(1.2)continue

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏

下⼀次循环的判断。

(2)for循环中的break和continue

(2.1)break

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

(2.2)continue

在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue 来实现。

注:do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,所以这里就不做演示了。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。