type
status
date
slug
summary
tags
category
icon
password
Property
循环
while循环
while
循环的通用形式如下:什么是真?
对C而言,表达式为真的值是1,表达式为假的值是0。一些C程序使用下面的循环结构,由于1为真,所以循环会一直进行。
在C中,真的概念很宽!一般而言,所有的非零值都视为真,只有0被视为假。
注:不要在本应使用==的地方使用=,=表达式的值为1,可能进入死循环
新的
_Bool
类型在C语言中,一直用
int
类型的变量表示真/假值。C99
专门针对这种类型的变量新增了_Bool
类型。在编程中,表示真或假的变量被称为布尔变量,所以_Bool
是C语言中布尔变量的类型名。_Bool
类型的变量只能储存1(真)或0(假)。如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1。这反映了C把所有的非零值都视为真。C99提供了
stdbool.h
头文件,该头文件让bool
成为_Bool
的别名,而且还把true
和false
分别定义为1和0的符号常量。包含该头文件后,写出的代码可以与C++
兼容,因为C++
把bool
、true
和false
定义为关键字。带空语句的while
有时,程序员会故意使用带空语句的while语句,因为所有的任务都在测试条件中完成了,不需要在循环体中做什么。例如,假设想跳过输入到第1个非空白字符或数字,可以这样写:
只要
scanf()
读取一个整数,就会返回1,循环继续执行。注意,为了提高代码的可读性,应该让这个分号独占一行,不要直接把它放在测试表达式同行。处理这种情况更好的方法是使用continue
语句。for循环
for
后面的圆括号中有3个表达式,分别用两个分号隔开。第1个表达式是初始化,只会在for
循环开始时执行一次。第 2 个表达式是测试条件,在执行循环之前对表达式求值。如果表达式为假,循环结束。第3个表达式执行更新,在每次循环结束时求值。可以省略一个或多个表达式(但是不能省略分号),只要在循环中包含能结束循环的语句即可:
省略第2个表达式被视为真,所以下面的循环会一直运行:
第1个表达式不一定是给变量赋初值,也可以使用
printf()
。在执行循环的其他部分之前,只对第1个表达式求值一次或执行一次。
逗号运算符
逗号运算符扩展了
for
循环的灵活性,以便在循环头中包含更多的表达式:do while循环
while
循环和for
循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C
语言还有出口条件循环,即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。这种循环被称为do while
循环。continue和break
break
用来结束所有循环,循环语句不再有执行的机会
continue
用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环
break
语句可用于循环和switch
语句中,但是continue
只能用于循环中。尽管如此,如果switch
语句在一个循环中,continue
便可作为switch
语句的一部分。这种情况下,就像在其他循环中一样,continue
让程序跳出循环的剩余部分,包括switch
语句的其他部分。选择
if else
在C语言中,使用
if
和else
关键字对条件进行判断:单独使用 if 语句的形式为:
if else
语句也可以多个同时使用,构成多个分支,形式如下:if
语句也可以嵌套使用,例如:else与if配对
如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来
一个统计单词的程序
switch case
switch
是另外一种选择结构的语句,用来代替简单的、拥有多个分支的if else
语句,基本格式如下:break
用于跳出 switch
语句。所谓“跳出”,是指一旦遇到 break
,就不再执行switch
中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个switch
执行结束了,接着会执行整个switch
后面的代码。可以有多个标签语句,
default
语句可选。如果
choice
的值是1或2,打印第1条消息;如果choice
的值是3,打印第2条和第3条消息(程序继续执行后续的语句,因为case 3后面没有break语句);如果choice
的值是4,则打印第3条消息;如果choice
的值是其他值只打印最后一条消息。?:条件运算符
C提供条件表达式作为表达
if else
语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要 3 个运算对象。条件表达式的通用形式如下:
如果
expression1
为真(非 0),那么整个条件表达式的值与expression2
的值相同;如果expression1
为假(0),那么整个条件表达式的值与expression3
的值相同。goto
避免使用
goto