第六章

6.1 if 语句

if (test-condition)
statement

if else 语句

if (test-condition)
statement1
else
statement2

格式化if else语句

使用{}

if else if else

6.2 逻辑表达式

&&、||、!

&&

如果左侧为false, 整个表达式必定为false, 将不会对右侧进行判定
|| 同理, 如果左侧为true, 整个表达式必定为true, 将不会对右侧进行判定

使用&&来确定取值范围

is_int(); // 使用INT_MAX, INT_MIN确定参数是否再取值范围内

其他表示方式

6.3 字符函数库 cctype

6.4 ?:运算符

唯一一个三目运算符, 可以用来替换if else
通用格式
expression1 ? expression2 : expression3;
可以将一个条件表达式嵌入到另一个条件表达式中

6.5 switch 语句

通用格式
switch (integer-expression)
{
case lable1 : statement(s)
case lable2 : statement(s)
... ...
default : statement(s)
}

使用枚举量用作标签

switch 和 if else

当选项超过两个时, switch 效率更高

6.6 break 和 continue 语句

6.7 读取数字的循环

int n;
cin >> n;
当用户输入一个非整数时:
1.n的值保持不变
2.不匹配的输入将会留在输入队列中
3.cin对象中的一个错误标记被设置
4.对cin方法的调用将会返回false(如果被转换位bool类型)
使用cin.clear方法重置错误输入标记, 输入错误和EOF都将导致cin返回false, 第17章将会讨论区分两种情况
当出现错误输入时, 处理顺序为:
1.重置cin以接受新的输入
2.删除错误输入
3.提示用户再次输入
for (int i = 0; i < Max; i++)
{
cout << "round#" << i + 1 << ":";
while (!(cin >> golf[i]))
{
cin.clear(); // 清除错误输入
while (cin.get() != '\n')
{
continue; // 清除错误输入
}
cout << "Please enter a number:"; // 提示用户再次输入
}
}

6.8 简单的文件输入输出

第十七章将更详细地讨论

文本I/O和文本文件

cin读取char、int、double类型、char类型数组
文本文件:每个字节都储存了一个字符编码的文件

写入到文本文件中

头文件: 命名空间:std 类:ostream 变量:cout
头文件: 命名空间:std 类:ofstream
ofstream.open() // 接受一个C风格字符串作为参数, 默认将原来的文件截断为0
ofstream.close()
当将 ofstream 变量和文本文件关联后, 可以像使用 cout 一样使用(所有的方法)
ostream.precision(val); // 控制精度, 小数点后保留val位
ostream.setf(ios_base::showpoint); // 强制显示浮点数后面的0

读取文本文件

头文件: 命名空间:std 类:istream 变量:cin
头文件: 命名空间:std 类:ifstream
ifstream.open() // 接受一个C风格字符串作为参数, 默认将原来的文件截断为0
ifstream.close()
当将 fstrea 变量和文本文件关联后, 可以像使用 cin 一样使用(所有的方法)
可以使用eof()、fail()等方法判断是否输入成功
如果试图打开不存在的文件进行输入:
inFlie.open("bowling.txt");
if (!inFile.is_open())
{
exit(EXIT_FAILURE);
}
ifstream.is_open(); // 检查文件是否打开成功
ifstream.good(); // 可以用来检测EOF, 没有任何错误时返回true, 在需要bool值的时候, ifstream可以转换位true/false, 所以可以直接将变量放到循环条件判断中
exit(); // 终止程序
istream.eof(); // 读取到了EOF, 返回true
istream.fail(); // 读取时发生了类型匹配错误