如何加强网站管理的队伍建设,重庆找做墩子网站,关联网站有那些,网页制作与设计是前端吗第 6 章 分支语句和逻辑运算符 C是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言#xff0c;是C语言的超集。本书是根据2003年的ISO/ANSI C标准编写的#xff0c;通过大量短小精悍的程序详细而全面地阐述了 C的基本概念和技术#xff0c;…第 6 章 分支语句和逻辑运算符 C是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言是C语言的超集。本书是根据2003年的ISO/ANSI C标准编写的通过大量短小精悍的程序详细而全面地阐述了 C的基本概念和技术并专辟一章介绍了C11新增的功能。 《C Primer Plus第6版中文版》分18章分别介绍了C程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C11新增功能等内容。 《C Primer Plus第6版中文版》针对C初学者从C语言基础知识开始介绍然后在此基础上详细阐述C新增的特性因此不要求读者有C语言方面的背景知识。《C Primer Plus第6版中文版》可作为高等院校教授C课程的教材也可供初学者自学C时使用。 本章内容包括if 语句。if else 语句。逻辑运算符、||和!。cctype 字符函数库。条件运算符?:。switch 语句。continue 和 break 语句。读取数字的循环。基本文件输入/输出。设计智能程序的一个关键是使程序具有决策能力。第 5 章介绍了一种决策方式——循环在循环中
程序决定是否继续循环。现在来研究一下 C是如何使用分支语句在可选择的操作中做出决定的。程序
应使用哪一种防止吸血鬼的方案大蒜还是十字架呢用户选择了哪个菜单选项呢用户是否输入了 0
C提供了 if 和 switch 语句来进行决策它们是本章的主要主题。另外还将介绍条件运算符和逻辑运算
符前者提供了另一种决策方式而后者允许将两个测试组合在一起。最后本章将首次介绍文件输入/
输出。6.1 if 语句
当 C程序必须决定是否执行某个操作时通常使用 if 语句来实现选择。if 有两种格式if 和 if else。 首先看一看简单的 if它模仿英语如“If you have a Captain Cookie card, you get a free cookie如果您有一 张 Captain Cookie 卡就可获得免费的小甜饼”。如果测试条件为 true则 if 语句将引导程序执行语句或 语句块如果条件是 false程序将跳过这条语句或语句块。因此if 语句让程序能够决定是否应执行特定 的语句。 if 语句的语法与 while 相似 如果 test-condition测试条件为 true则程序将执行 statement语句后者既可以是一条语 句也可以是语句块。如果测试条件为 false则程序将跳过语句参见图 6.1。和循环测试条件一 样if 测试条件也将被强制转换为 bool 值因此 0 将被转换为 false非零为 true。整个 if 语句被视 为一条语句。 通常情况下测试条件都是关系表达式如那些用来控制循环的表达式。例如假设读者希望程序计 算输入中的空格数和字符总数则可以在 while 循环中使用 cin.getchar来读取字符然后使用 if 语句识 166 C Primer Plus第 6 版中文版 别空格字符并计算其总数。程序清单 6.1 完成了这项工作它使用句点.来确定句子的结尾。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZfLPCHs-1678173837043)(2023-03-06-18-53-41.png)]
### 6.1.1 if else 语句 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMBeTVa0-1678173837044)(2023-03-06-19-09-01.png)]
条件运算符和错误防范
许多程序员将更直观的表达式 variable value 反转为 value variable以此来捕获将相等运算符误 写为赋值运算符的错误。例如下述条件有效可以正常工作
if (3 myNumber)
但如果错误地使用下面的条件编译器将生成错误消息因为它以为程序员试图将一个值赋给一个字 面值3 总是等于 3而不能将另一个值赋给它 if (3 myNumber)
假设犯了类似的错误但使用的是前一种表示方法 if (myNumber 3)
编译器将只是把 3 赋给 myNumber而 if 中的语句块将包含非常常见的、而又非常难以发现的错误然 而很多编译器会发出警告因此注意警告是明智的。一般来说编写让编译器能够发现错误的代码比 找出导致难以理解的错误的原因要容易得多。
6.2 逻辑表达式
经常需要测试多种条件。例如字符要是小写其值就必须大于或等于’a’且小于或等于’z’。如果要 求用户使用 y 或 n 进行响应则希望用户无论输入大写Y 和 N或小写都可以。为满足这种需要C 提供了 3 种逻辑运算符来组合或修改已有的表达式。这些运算符分别是逻辑 OR||、逻辑 AND 和逻辑 NOT!。下面介绍这些运算符。
6.2.1 逻辑 OR 运算符||
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJyXsdzF-1678173837044)(2023-03-06-19-17-11.png)]
6.2.2 逻辑 AND 运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lzisQ7f-1678173837045)(2023-03-06-19-18-53.png)]
取值范围测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CIOvmENr-1678173837045)(2023-03-06-19-19-30.png)]
6.2.4 逻辑 NOT 运算符!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aA4IHMVD-1678173837046)(2023-03-06-19-20-15.png)]
6.3 字符函数库 cctype
C从 C 语言继承了一个与字符相关的、非常方便的函数软件包它可以简化诸如确定字符是否为大 写字母、数字、标点符号等工作这些函数的原型是在头文件 cctype老式的风格中为 ctype.h中定义的。 例如如果 ch 是一个字母则 isalphach函数返回一个非零值否则返回 0。同样如果 ch 是标点符 号如逗号或句号函数 ispunctch将返回 true。这些函数的返回类型为 int而不是 bool但通常 bool 转换让您能够将它们视为 bool 类型。
使用这些函数比使用 AND 和 OR 运算符更方便。例如下面是使用 AND 和 OR 来测试字符 ch 是不 是字母字符的代码
与使用 isalpha( )相比
isalpha( )不仅更容易使用而且更通用。AND/OR 格式假设 A-Z 的字符编码是连续的其他字符的编 码不在这个范围内。这种假设对于 ASCII 码来说是成立的但通常并非总是如此。
程序清单 6.8 演示一些 ctype 库函数。具体地说它使用 isalpha( )来检查字符是否为字母字符使用 isdigits( )来测试字符是否为数字字符如 3使用 isspace( )来测试字符是否为空白如换行符、空格和制 表符使用 ispunct( )来测试字符是否为标点符号。该程序还复习了 if else if 结构并在一个 while 循环中 使用了 cin.getchar。
i[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSH5jYPA-1678173837046)(2023-03-06-19-43-52.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ysol9paX-1678173837046)(2023-03-06-19-44-54.png)]
6.4 ?:运算符三元运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFtRUExx-1678173837046)(2023-03-06-19-48-07.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-speOy706-1678173837047)(2023-03-06-20-19-53.png)]
6.5 switch 语句
假设要创建一个屏幕菜单要求用户从 5 个选项中选择一个例如便宜、适中、昂贵、奢侈、过度。 虽然可以扩展 if else if else 序列来处理这 5 种情况但 C的 switch 语句能够更容易地从大型列表中进行 选择。下面是 switch 语句的通用格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aoAQG3fJ-1678173837047)(2023-03-06-23-10-15.png)]
C的 switch 语句就像指路牌告诉计算机接下来应执行哪行代码。执行到 switch 语句时程序将跳 到使用 integer-expression 的值标记的那一行。例如如果 integer-expression 的值为 4则程序将执行标签为 case 4那一行。顾名思义integer-expression 必须是一个结果为整数值的表达式。另外每个标签都必须 是整数常量表达式。最常见的标签是 int 或 char 常量如 1 或’q’也可以是枚举量。如果 integer-expression
不与任何标签匹配则程序将跳到标签为 default 的那一行。Default 标签是可选的如果被省略而又没 有匹配的标签则程序将跳到 switch 后面的语句处执行参见图 6.3。 switch 语句与 Pascal 等语言中类似的语句之间存在重大的差别。C中的 case 标签只是行标签而不 是选项之间的界线。也是说程序跳到 switch 中特定代码行后将依次执行之后的所有语句除非有明确 的其他指示。程序不会在执行到下一个 case 处自动停止要让程序执行完一组特定语句后停止必须使用 break 语句。这将导致程序跳到 switch 后面的语句处执行。
6.6 break 和 continue 语句
break 和 continue 语句都使程序能够跳过部分代码。可以在 switch 语句或任何循环中使用 break 语句 使程序跳到 switch 或循环后面的语句处执行。continue 语句用于循环中让程序跳过循环体中余下的代码 并开始新一轮循环参见图 6.4。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fQKQfZAY-1678173837047)(2023-03-06-23-13-48.png)]
6.8 简单文件输入/输出
有时候通过键盘输入并非最好的选择。例如假设您编写了一个股票分析程序并下载了一个文件 其中包含 1000 种股票的价格。在这种情况下让程序直接读取文件而不是手工输入文件中所有的值将 方便得多。同样让程序将输出写入到文件将更为方便这样可得到有关结果的永久性记录。 幸运的是C使得将读取键盘输入和在屏幕上显示输出统称为控制台输入/输出的技巧用于文件 输入/输出文件 I/O非常简单。第 17 章将更详细地讨论这些主题这里只介绍简单的文本文件 I/O。
6.8.1 文本 I/O 和文本文件
这里再介绍一下文本 I/O 的概念。使用 cin 进行输入时程序将输入视为一系列的字节其中每个字 节都被解释为字符编码。不管目标数据类型是什么输入一开始都是字符数据——文本数据。然后cin 对象负责将文本转换为其他类型。为说明这是如何完成的来看一些处理同一个输入行的代码。 假设有如下示例输入行
来看一下使用不同数据类型的变量来存储时cin 是如何处理该输入行的。首先来看使用 char 数据 类型的情况
输入行中的第一个字符被赋给 ch。在这里第一个字符是数字 3其字符编码二进制被存储在变 量 ch 中。输入和目标变量都是字符因此不需要进行转换。注意这里存储的数值 3而是字符 3 的编码。 执行上述输入语句后输入队列中的下一个字符为字符 8下一个输入操作将对其进行处理。 接下来看看 int 类型 在这种情况下cin 将不断读取直到遇到非数字字符。也就是说它将读取 3 和 8这样句点将成为 输入队列中的下一个字符。cin 通过计算发现这两个字符对应数值 38因此将 38 的二进制编码复制到变 量 n 中。
接下来看看 double 类型
在这种情况下cin 将不断读取直到遇到第一个不属于浮点数的字符。也就是说cin 读取 3、8、句 点和 5使得空格成为输入队列中的下一个字符。cin 通过计算发现这四个字符对应于数值 38.5因此将 38.5 的二进制编码浮点格式复制到变量 x 中。 接下来看看 char 数组的情况 在这种情况下cin 将不断读取直到遇到空白字符。也就是说它读取 3、8、句点和 5使得空格成 为输入队列中的下一个字符。然后cin 将这 4 个字符的字符编码存储到数组 word 中并在末尾加上一个 空字符。这里不需要进行任何转换。
最后来看一下另一种使用 char 数组来存储输入的情况 在这种情况下cin 将不断读取直到遇到换行符示例输入行少于 50 个字符。所有字符都将被存储 到数组 word 中并在末尾加上一个空字符。换行符被丢弃输入队列中的下一个字符是下一行中的第一 个字符。这里不需要进行任何转换。
对于输入将执行相反的转换。即整数被转换为数字字符序列浮点数被转换为数字字符和其他字符 组成的字符序列如 284.53 或−1.58E06。字符数据不需要做任何转换。 这里的要点是输入一开始为文本。因此控制台输入的文件版本是文本文件即每个字节都存储了 一个字符编码的文件。并非所有的文件都是文本文件例如数据库和电子表格以数值格式即二进制整 数或浮点格式来存储数值数据。另外字处理文件中可能包含文本信息但也可能包含用于描述格式、 字体、打印机等的非文本数据。 本章讨论的文件 I/O 相当于控制台 I/O因此仅适用于文本文件。要创建文本文件用于提供输入可 使用文本编译器如 DOS 中的 EDIT、Windows 中的“记事本”和 UNIX/Linux 系统中的 vi 或 emacs。 也 可以使用字处理程序来创建但必须将文件保存为文本格式。IDE 中的源代码编辑器生成的也是文本文件 事实上源代码文件就属于文本文件。同样可以使用文本编辑器来查看通过文本输出创建的文件。
6.8.2 写入到文本文件中
对于文件输入C使用类似于 cout 的东西。下面来复习一些有关将 cout 用于控制台输出的基本事实 为文件输出做准备。
必须包含头文件 iostream。
头文件 iostream 定义了一个用处理输出的 ostream 类。
头文件 iostream 声明了一个名为 cout 的 ostream 变量对象。
必须指明名称空间 std例如为引用元素 cout 和 endl必须使用编译指令 using 或前缀 std::。
可以结合使用 cout 和运算符来显示各种类型的数据。 文件输出与此极其相似。
必须包含头文件 fstream。
头文件 fstream 定义了一个用于处理输出的 ofstream 类。
需要声明一个或多个 ofstream 变量对象并以自己喜欢的方式对其进行命名条件是遵守常用 的命名规则。
必须指明名称空间 std例如为引用元素 ofstream必须使用编译指令 using 或前缀 std::。
需要将 ofstream 对象与文件关联起来。为此方法之一是使用 open( )方法。
使用完文件后应使用方法 close( )将其关闭。
可结合使用 ofstream 对象和运算符来输出各种类型的数据。 注意虽然头文件 iostream 提供了一个预先定义好的名为 cout 的 ostream 对象但您必须声明自己的 ofstream 对象为其命名并将其同文件关联起来。下面演示了如何声明这种对象 下面演示了如何将这种对象与特定的文件关联起来 注意方法 open( )接受一个 C-风格字符串作为参数这可以是一个字面字符串也可以是存储在数组 192 C Primer Plus第 6 版中文版 中的字符串。 下面演示了如何使用这种对象 重要的是声明一个 ofstream 对象并将其同文件关联起来后便可以像使用 cout 那样使用它。所有可 用于 cout 的操作和方法如、endl 和 setf( )都可用于 ofstream 对象如前述示例中的 outFile 和 fout。 总之使用文件输出的主要步骤如下。 1包含头文件 fstream。 2创建一个 ofstream 对象。 3将该 ofstream 对象同一个文件关联起来。 4就像使用 cout 那样使用该 ofstream 对象。 程序清单 6.15 中的程序演示了这种方法。它要求用户输入信息然后将信息显示到屏幕上再将这些 信息写入到文件中。读者可以使用文本编辑器来查看该输出文件的内容。
该程序的最后一部分与 cout 部分相同只是将 cout 替换为 outFile 而已。下面是该程序的运行情况 屏幕输出是使用 cout 的结果。如果您查看该程序的可执行文件所在的目录将看到一个名为 carinfo.txt 的新文件根据编译器的配置该文件也可能位于其他文件夹其中包含使用 outFile 生成的输出。如果 使用文本编辑器打开该文件将发现其内容如下 正如读者看到的outFile 将 cout 显示到屏幕上的内容写入到了文件 carinfo.txt 中。 程序说明 在程序清单 6.15 的程序中声明一个 ofstream 对象后便可以使用方法 open( )将该对象特定文件关联 起来 程序使用完该文件后应该将其关闭 注意方法 close( )不需要使用文件名作为参数这是因为 outFile 已经同特定的文件关联起来。如果 您忘记关闭文件程序正常终止时将自动关闭它。 outFile 可使用 cout 可使用的任何方法。它不但能够使用运算符还可以使用各种格式化方法如 setf( )和 precision( )。这些方法只影响调用它们的对象。例如对于不同的对象可以提供不同的值 读者需要记住的重点是创建好 ofstream 对象如 outFile后便可以像使用 cout 那样使用它。 回到 open( )方法 在这里该程序运行之前文件 carinfo.txt 并不存在。在这种情况下方法 open( )将新建一个名为 carinfo.txt 的文件。如果在此运行该程序文件 carinfo.txt 将存在此时情况将如何呢默认情况下open( ) 将首先截断该文件即将其长度截短到零——丢其原有的内容然后将新的输出加入到该文件中。第 17 章将介绍如何修改这种默认行为。 194 C Primer Plus第 6 版中文版 警告打开已有的文件以接受输出时默认将它其长度截短为零因此原来的内容将丢失。 打开文件用于接受输入时可能失败。例如指定的文件可能已经存在但禁止对其进行访问。因此细 心的程序员将检查打开文件的操作是否成功这将在下一个例子中介绍。
6.8.3 读取文本文件
接下来介绍文本文件输入它是基于控制台输入的。控制台输入涉及多个方面下面首先总结这些 方面。
必须包含头文件 iostream。
头文件 iostream 定义了一个用处理输入的 istream 类。
头文件 iostream 声明了一个名为 cin 的 istream 变量对象。
必须指明名称空间 std例如为引用元素 cin必须使用编译指令 using 或前缀 std::。
可以结合使用 cin 和运算符来读取各种类型的数据。
可以使用 cin 和 get( )方法来读取一个字符使用 cin 和 getline( )来读取一行字符。
可以结合使用 cin 和 eof( )、fail( )方法来判断输入是否成功。
对象 cin 本身被用作测试条件时如果最后一个读取操作成功它将被转换为布尔值 true否则 被转换为 false。 文件输出与此极其相似
必须包含头文件 fstream。
头文件 fstream 定义了一个用于处理输入的 ifstream 类。
需要声明一个或多个 ifstream 变量对象并以自己喜欢的方式对其进行命名条件是遵守常用 的命名规则。
必须指明名称空间 std例如为引用元素 ifstream必须使用编译指令 using 或前缀 std::。
需要将 ifstream 对象与文件关联起来。为此方法之一是使用 open( )方法。
使用完文件后应使用 close( )方法将其关闭。
可结合使用 ifstream 对象和运算符来读取各种类型的数据。
可以使用 ifstream 对象和 get( )方法来读取一个字符使用 ifstream 对象和 getline( )来读取一行字符。
可以结合使用 ifstream 和 eof( )、fail( )等方法来判断输入是否成功。
ifstream 对象本身被用作测试条件时如果最后一个读取操作成功它将被转换为布尔值 true否 则被转换为 false。 注意虽然头文件 iostream 提供了一个预先定义好的名为 cin 的 istream 对象但您必须声明自己的 ifstream 对象为其命名并将其同文件关联起来。下面演示了如何声明这种对象 下面演示了如何将这种对象与特定的文件关联起来 注意方法 open( )接受一个 C-风格字符串作为参数这可以是一个字面字符串也可以是存储在数组 中的字符串。 下面演示了如何使用这种对象 第 6 章 分支语句和逻辑运算符 195 重要的是声明一个 ifstream 对象并将其同文件关联起来后便可以像使用 cin 那样使用它。所有可用 于 cin 的操作和方法都可用于 ifstream 对象如前述示例中的 inFile 和 fin。 如果试图打开一个不存在的文件用于输入情况将如何呢这种错误将导致后面使用 ifstream 对象进 行输入时失败。检查文件是否被成功打开的首先方法是使用方法 is_open( )为此可以使用类似于下面的 代码 如果文件被成功地打开方法 is_open( )将返回 true因此如果文件没有被打开表达式!inFile.isopen( ) 将为 true。函数 exit( )的原型是在头文件 cstdlib 中定义的在该头文件中还定义了一个用于同操作系统 通信的参数值 EXIT_FAILURE。函数 exit( )终止程序。 方法 is_open( )是 C中相对较新的内容。如果读者的编译器不支持它可使用较老的方法 good( )来代 替。正如第 17 章将讨论的方法 good( )在检查可能存在的问题方面没有 is_open( )那么广泛。 程序清单 6.16 中的程序打开用户指定的文件读取其中的数字然后指出文件中包含多少个值以及它 们的和与平均值。正确地设计输入循环至关重要详细请参阅后面的“程序说明”。注意通过使用了 if 语句该程序受益匪浅。
要运行程序清单 6.16 中的程序首先必须创建一个包含数字的文本文件。为此可以使用文本编辑器 如用于编写源代码的文本编辑器。假设该文件名为 scores.txt包含的内容如下 程序还必须能够找到这个文件。通常除非在输入的文件名中包含路径否则程序将在可执行文件所 属的文件夹中查找。 警告Windows 文本文件的每行都以回车字符和换行符结尾通常情况下C在读取文件时将这两 个字符转换为换行符并在写入文件时执行相反的转换。有些文本编辑器如 Metrowerks CodeWarrior IDE 编辑器不会自动在最后一行末尾加上换行符。因此如果读者使用的是这种编辑器请在输入最后的文 本后按下回车键然后再保存文件。 下面是该程序的运行情况 程序说明
该程序没有使用硬编码文件名而是将用户提供的文件名存储到字符数组 filename 中然后将该数组 用作 open( )的参数 正如本章前面讨论的检查文件是否被成功打开至关重要。下面是一些可能出问题的地方指定的文 件可能不存在文件可能位于另一个目录文件夹中访问可能被拒绝用户可能输错了文件名或省略 了文件扩展名。很多初学者花了大量的时间检查文件读取循环的哪里出了问题后最终却发现问题在于程 序没有打开文件。检查文件是否被成功打开可避免将这种将精力放在错误地方的情况发生。 读者需要特别注意的是文件读取循环的正确设计。读取文件时有几点需要检查。首先程序读取文 件时不应超过 EOF。如果最后一次读取数据时遇到 EOF方法 eof( )将返回 true。其次程序可能遇到类 型不匹配的情况。例如程序清单 6.16 期望文件中只包含数字。如果最后一次读取操作中发生了类型不匹 配的情况方法 fail( )将返回 true如果遇到了 EOF该方法也将返回 true。最后可能出现意外的问题 如文件受损或硬件故障。如果最后一次读取文件时发生了这样的问题方法 bad( )将返回 true。不要分别检 查这些情况一种更简单的方法是使用 good( )方法该方法在没有发生任何错误时返回 true
然后如果愿意可以使用其他方法来确定循环终止的真正原因
这些代码紧跟在循环的后面用于判断循环为何终止。由于 eof( )只能判断是否到达 EOF而 fail( )可 用于检查 EOF 和类型不匹配因此上述代码首先判断是否到达 EOF。这样如果执行到了 else if 测试便 可排除 EOF因此如果 fail( )返回 true便可断定导致循环终止的原因是类型不匹配。 方法 good( )指出最后一次读取输入的操作是否成功这一点至关重要。这意味着应该在执行读取输入 的操作后立刻应用这种测试。为此一种标准方法是在循环之前首次执行循环测试前放置一条输 入语句并在循环的末尾下次执行循环测试之前放置另一条输入语句 鉴于以下事实可以对上述代码进行精简表达式 inFile value 的结果为 inFile而在需要一个 bool 值的情况下inFile 的结果为 inFile.good( )即 true 或 false。 因此可以将两条输入语句用一条用作循环测试的输入语句代替。也就是说可以将上述循环结构替 换为如下循环结构 这种设计仍然遵循了在测试之前进行读取的规则因为要计算表达式 inFile value 的值程序必须 首先试图将一个数字读取到 value 中。 至此读者对文件 I/O 有了初步的认识。
6.9 总结
使用引导程序选择不同操作的语句后程序和编程将更有趣这是否也能引起程序员们的兴趣我没 有做过研究。C提供了 if 语句、if else 语句和 switch 语句来管理选项。if 语句使程序有条件地执行语句 或语句块也就是说如果满足特定的条件程序将执行特定的语句或语句块。if else 语句程序选择执行 两个语句或语句块之一。可以在这条语句后再加上 if else以提供一系列的选项。switch 语句引导程序执 行一系列选项之一。
C还提供了帮助决策的运算符。第 5 章讨论了关系表达式这种表达式对两个值进行比较。if 和 if else 语句通常使用关系表达式作为测试条件。通过使用逻辑运算符、||和!可以组合或修改关系表达式 创建更细致的测试。条件运算符?:提供了一种选择两个值之一的简洁方式。
cctype 字符函数库提供了一组方便的、功能强大的工具可用于分析字符输入。
对于文件 I/O 来说循环和选择语句是很有用的工具文件 I/O 与控制台 I/O 极其相似。声明 ifstream 和 ofstream 对象并将它们同文件关联起来后便可以像使用 cin 和 cout 那样使用这些对象。
使用循环和决策语句便可以编写有趣的、智能的、功能强大的程序。不过我们刚开始涉足 C的强 大功能下一章将介绍函数。