第6章 分支语句和逻辑运算符
本章内容包括:
- if 语句
- if else语句
- 逻辑运算符,&& 、||、!
- cctype字符函数库
- 条件运算符 ?:
- switch语句
- continue和break语句
- 读取数字的循环
- 基本文件输入输出
(很基础,我捡着重点的写)
条件运算符和错误防范
许多程序员将更直观的表达式variable == value反转为value ==variable,以此来捕获将相等运算符误写为赋值运算符的错误。编写让编译器能够发现错误的代码,比找出错误原因更加容易。
6.2 逻辑表达式
C++中||运算符为顺序点,先修改左侧的值,然后再对右侧的值进行判断。如果左侧的值为true,那么C++不会去判定右侧的表达式。
&&运算符也为顺序点,和||是一样的。
使用&&连接表达式,不要将 if (age >17 &&age <35) 改写成if(17<age<35)。编译器是不会捕获这种错误的,会被识别为:if ((17 < age) < 35)
C++的OR和AND运算符优先级都低于关系运算符。
而!运算符的优先级高于所有关系运算符和算术运算符。
&&、||、!和and、or、not等价,但是C中使用后者需要包含头文件iso646.h。C++不需要。
6.3 字符库函数cctype
C++从C继承了一个与字符相关的,非常相关的函数软件包,可以简化比如确定字符是否为大写,数字,标点符号等工作,头文件为cctype。
cctype中常用的函数:
函数名称 | 返回值 |
---|---|
isalnum() | 如果参数是字母数字,即字母或数字,返回true |
isalpha() | 如果参数是字母,返回true |
iscntrl() | 如果参数是控制字符,返回true |
isdigit() | 如果参数是数字,返回true |
isgraph() | 如果参数是除空格外的打印字符,返回true |
islower() | 如果参数是小写字母,返回true |
isprint() | 如果参数是打印字符(包括空格),返回true |
ispunct() | 如果参数是标点符号,返回true |
isspace() | 如果参数是标准空白字符,比如空格、换行符、回车、制表符,返回true |
isupper() | 如果参数是大写字母,该函数返回true |
isxdigit() | 如果参数是十六进制,返回true |
tolower() | 如果参数是大写字符,返回小写,否则返回该参数。 |
toupper() | 如果参数是小写字符,返回大写,否则返回该参数。 |
6.4 ?:运算符
C++中唯一一个三参数运算符。
exprssion1?exprssion2:exprssion3
exprssion1为true,则表达式为exprssion2的值,否则为exprssion3的值。
6.5 switch语句
C++中的case只是行标签,而不是选项之间的界限。也就是说,如果没有break;那么将依次执行后续的语句。
比起ifelse来说,switch并不是为了处理取值范围而设计的,每个case都需要是一个单独的值,因此无法处理浮点数。
由于switch语句专门用来处理多个if语句的情况,因此,如果选项超过两个,旧代码长度和执行速度来说,switch语句的效率更高。因此当选项不少于3个,应该用switch语句。
6.8 简单文件输入/输出
控制台输入输出使用的头文件是iostream。
文本文件的输入输出,使用的头文件是fstream。
输出
其中定义了用于处理输出的ofstream类。
虽然头文件iostream中预定义好了cout的ostream对象,但是fstream中没有,所以需要自定义自己的ofstream对象。
ofstream outFile; //outFile an ofstream object
ofstream fout; // fout an ofstream object
outFile.open("fish.txt"); // outFile used to write to fishh.txt file
char filename[50];
cin >> filename;
fout.open(filename); // fout used to read specified file
double wt = 125.8;
outFile << wt; // write a number to fish.txt
char line[80] = "Objects are there."
fout << line << endl; // write a line
outFile.close();
fout.close();
使用完文件后,应该使用方法close()将其关闭。
打开已有的文件,用来接收输出时,默认会将其中的长度截断为0,原来的内容将丢失。
输入
头文件fstream中定义了ifstream类。<