for和while循环是入口循环,而do while是出口循环。
P134
副作用和顺序点:
副作用(side effect)指的是计算表达式时对某些变量进行了修改。
顺序点(sequence point)是程序执行过程的一个点,在进行下一步之前将确保对所有的副作用都进行了评估。
前缀格式和后缀格式:
在写代码的过程中应尽量避免:
y = (4 + x++) + (6 + x++);
这样的操作。
前缀函数将值加1,然后返回结果。
后缀函数先复制一个副本,将其加1,然后将复制的副本加1。
显然前缀版本的效率要高。
后缀运算符的优先级要高于指针运算符‘*’。
组合赋值运算符(语句块):
用花括号括起来的语句块中定义的变量的作用域只为该语句块。
逗号运算符:
允许将两个表达式放到C++句法只允许放一个表达式的地方。
例:
int i, j;//逗号是一个列表分隔符 for(i = 0, j = 5; i < j; i++, j--)//逗号运算符,被当做一个顺序点 { pass }
注:逗号运算符的优先级是最低的。
等待一段时间:编写延时循环
1 #include<iostream> 2 #include<ctime> 3 int main() 4 { 5 using namespace std; 6 cout << "CLOCKS_PER_SEC" << CLOCKS_PER_SEC << endl; 7 float delay_s; 8 cin >> delay_s; 9 clock_t delay = CLOCKS_PER_SEC*delay_s;//常量CLOCKS_PER_SEC,定义了每秒钟的系统时间单位数 10 clock_t start = clock();//返回程序开始执行后的系统时间 11 while(clock()-start < delay); 12 cout << "end" << endl; 13 system("pause"); 14 return 0; 15 }
clock_t作为clock()返回类型的别名。
C++定义别名的方式有两种:
1. 预处理器
#define BYTE char
2. 使用关键字typedef来创建别名
typedef char BYTE;
typedef是更加的选择,定义变量时不需要原类型替换。
循环和文本输入:
读取char时,和读取其他类型一样,cin将忽略空格和换行符。
cin.get(char)将会读取输入中的下一个字符,即使是空格。
EOF结束输入:
EOF为文件尾结束标志,EOF为-1,键盘输入时用组合键Ctrl+z模拟文件尾。
当到达文件尾时设置两个标志位:eofbit和failbit,设置值位1 ,此时不再接收任何输入流。
istream对象的成员函数eof()和fail()返回这两个标志位的状态(是否被设置)。
istream对象的成员函数clear()可以重置这两个标志位。
1 #include<iostream> 2 3 int main() 4 { 5 using namespace std; 6 char pc; 7 cin.get(pc); 8 //用ctrl+l组合的键盘输入来模拟文件尾EOF,检测到EOF后,两个标志位都被设置为1. 9 while (cin.eof() == false) //eof()查看eofbit是否被设置 10 // while (cin.fail() == false) //fail()查看failbit是否被设置 11 { 12 cout << pc; 13 cin.get(pc); 14 } 15 16 cin.clear(); 17 18 char *se = new char [20]; 19 cin >> se; 20 cout << se << endl; 21 delete [] se; 22 23 system("pause"); 24 return 0; 25 }
C++与C的输入输出:
ch = cin.get()的工作方式类似于C语言的getchar(),将字符编码作为int值返回。
cin.get(ch)返回一个istream对象。
cout.put(ch)类似于C语言的putchar(),只不过其出入参数为char,而不是int。