循环和关系表达式
1. p142
字符串数组中
word 是数组名
word == “mate”
数组名是数组的地址, 同样,用引号括起来的字符串常量也是其地址,因此上面的关系式判断的是否存储在相同的地址上。
2.p147
for跟while 差别
for循环中省略了测试条件,将认为条件为true
for循环中,可使用初始化语句声明一个局部变量,但在while循环中不能这么做。
continue语句 稍有不同。
在无法预先知道循环将执行的次数时,程序员常使用while循环。
3.p149
类型别名
一 使用于处理器 #define BYTE char
二 使用关键字 typedef 来创建别名 typedef char byte
在声明一系列变量时,不适合
#define FLOAT_POINTER float * FLOAT_POINTER pa,pb;
这样pa是个指针指向了float , 而pb只是个float
typedef 方法不会有这样的问题,它能够处理复杂的类型别名。
typedef 方法不会创建新类型,而只是为已有的类型建立一个新名称,
4.p152
基于范围的for循环
对数组(容器类,如vector 和 array)的每个元素执行相同操作
double prices[5] = {4.99,13.44,5.23,74.09,32.11}; for(double x : prices) cout<<x<<std::endl;
符号&表明x是个引用变量 -----第八章 加了&可以改变数组的内容。
还可以基于范围的for循环和初始化列表 ---第十六章讨论各种模板容器类
for(int x : {3,4,6,24,}) cout<<x<<" "; cout<<"\n";
5.p153
循环与文本输入
cin将忽略空格和换行符,发送给cin的输入被缓冲。这意味着只有在用户按下回车键后,他输入的内容才会发送给程序。这就是在运行该程序时,可以在#后面输入字符的原因。按下回车键,整个字符序列将被发送给程序,但是程序在遇到#字符后将结束对输入的处理。
用 cin.get(ch) 进行替换之前的 cin>>ch
cin.get 逐个字符读取输入的程序需要检查每个字符,包括空格,制表符,换行符。
6.p155
文件扫尾条件
cin.fail() == false //test for EOF
!cin.fail()
更通用
while(cin.get(ch)) { ... }
这样cin.get(char)只被调用一次,而不是两次:循环前一次,循环结束后一次。为判断循环测试条件,程序必须首先调用cin.get(ch). 如果成功,则将值放入ch中。然后获得函数调用的返回值,即cin。接下来,程序对cin,进行bool转换,如果输入成功,则结果为true,否则false。三条指导原则(确定结束条件,对条件进行初始化以及更新条件)全部被放在循环测试条件中。
7.p157
另一个版本的cin.get()
C getchar() putchar() 头文件 stdio.h or cstido
cin.get(ch) 用于字符输入时函数的返回值 istream对象(执行bool转换为true)
到达EOF时函数的返回值 istream对象(执行bool转换false)
p163复习题中8. int x = (1,024) 是否有效,有效将执行什么工作。
然后 int y;
y = 1,024;
有效,表达式1,1024 由两个表达式组成 ——1和024,用逗号运算符连接。值为右侧表达式的值。这是024,八进制为20,因此该声明将值20赋给X。第二条语句也是有效果,然而运算符优先级将导致被判定成这样
(y=1),024 ;
024或20 没有使用