第6章 分支语句和逻辑运算符
- if语句
- if else语句
- 逻辑运算符——&&、||和!
- cctype字符函数库
- 条件运算符?:
- switch语句
- continue和break语句
- 读取数字的循环
- 基本文件输入/输出
6.1 if语句
6.1.1 if else语句
6.1.2 格式化if else语句
6.1.3 if else if else结构
6.2 逻辑表达式
6.2.1 逻辑OR运算符:||
6.2.2 逻辑AND运算符:&&
6.2.3 用&&来设置取值范围
6.2.4 逻辑NOT运算符:!
6.2.5 逻辑运算符细节
C++逻辑OR和逻辑AND运算符的优先级都低于关系运算符。
6.2.6 其他表示方式
6.3 字符函数库cctype
确定字符是否为大写字母、数字、标点符号的工作,cctype。
- isalpha():是否是字母,是则返回非0值,否则返回0
- ispunct():标点符号(逗号、句号)
- isspace():空白(换行符、空格、制表符)
- isdigit():数字
- …:其他的还有字母或数字、控制字符、除空格之外的打印字符、小写字母、包括空格的打印字符、大写字母、十六进制数字、转大写、转小写等
6.4 ?:运算符
6.5 switch语句
switch (integer-expression)
{
case label1: statement(s)
case label2: statement(s)
...
default: statement(s)
}
6.5.1 将枚举量用作标签
6.5.2 switch和if else
switch的case标签是单独的值,必须是整数(包括char, enum),无法处理浮点,而且是常量。
6.6 break和continue语句
6.7 读取数字的循环
如下只能输入数字:
double fish[5]
int i = 0;
while (cin << fish[i]) {} // 输入的不是数字时,不再循环
如下只能输入数字,并消除错误输入:
int golf[5]
while (!(cin >> golf[i]))
{
cin.clear(); // reset input
while (cin.get() != '\n')
continue; // get rid of bad input 消除不良输入
cout << "Please enter a number: ";
}
6.8 简单文件输入/输出
6.8.1 文本I/O和文本文件
本章讨论的文件IO相当于控制台IO,仅适用于文本文件,不包含描述格式、字体等的信息。
不管目标数据类型是什么,cin输入一开始都是字符数据——文本数据,然后cin对象负责将文本转换为其他类型。
char ch;
int nl
double x;
char word[50];
// 假设输入了:
// 38.5 19.2
cin >> ch; // 第一个字符3,输入和目标变量都是字符,不需要转换。然后处理下一个字符
cin >> n; // cin不断读取,直到遇到非数字字符。遇到小数点,存了38
cin >> x; // cin不断读取,直到遇到第一个不属于浮点数的字符。遇到空格,存了38.5
cin >> word; // cin不断读取,直到遇到空白字符。遇到空格,存了"38.5"
cin.getline(word, 50); // cin不断读取,直到遇到换行符,所有字符都存到了word中
6.8.2 写入到文本文件中
文件输出(写入文件)的套路:
- 包含头文件fstream
- 声明ofstream变量(对象)
- 使用名称空间std
- 将ofstream对象与文件关联起来,例如使用Open()
- 使用完文件后,用close()将其关闭
- 可结合使用ofstream对象和运算符<<来输出各种类型数据
ofstream outFile; // create object for output
outFile.open("carinfo.txt");
// 做点什么
double wt = 125.8;
outFile << wt; // 写入一个double
char line[81] = "Objects are closer than they appear.";
outFile << line << endl; // 写入一行字符串
outFile.close();
如果open的文件已存在,默认将其长度截短为零,原来的内容将丢失。
6.8.3 读取文本文件
文件输入(读取文件)的套路:
- 包含头文件fstream
- 声明ifstream变量(对象)
- 使用名称空间std
- 将ifstream对象与文件关联起来,例如使用Open()
- 使用完文件后,用close()将其关闭
- 运算符>>
- 用get()读取一个字符,用getline()读取一行字符
- 用eof() fail()来判断输入是否成功
ifstream fin;
fin.open("bowling.txt");
double wt;
fin >> wt; // 从文件中读取一个double
char line[81];
fin.getline(line, 81); // 从文件中读取一行
打开不存在的文件会错误,用is_open()检查文件是否成功打开:
inFile.open("wtf.txt");
if (!inFile.is_open())
{
exit(EXIT_FAILURE); // 头文件cstdlib
}
- 检查文件是否被成功打开很重要。
- 设计文件读取循环,eof, good
使用good()判断最后一次读取输入是否成功
// standard file-reading loop design
inFile >> value; // get first value
while (inFile.good()) // while input good and not at EOF
{
// loop body goes here
inFile >> value; // get next value
}
// 精简版
while (inFile >> value)
{
// loop body
}
6.9 总结
- if, if else, switch
- && || ! ?:
- cctype分析字符输入
- ofstream写文件,ifstream读文件
6.10 复习题
6.11 编程练习
1
2 略
3 如果将res使用C风格字符串char res[20],他不能直接赋值(res = “word”),ide会报错“必须是可修改的左值”。这是因为res是数组名,是地址。解决方法是使用strcpy()。
4 略
5 略
6 略
7 不用cin.clear()应该也可以。
8 略
9 略
999.Ref
- C中关于“表达式必须是可修改的左值错误”的解决方式:https://blog.csdn.net/qq_18671205/article/details/90109541
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 cdd@ahucd.cn