一、循环语句
1、for循环
for (initialization; test-expression; update-expression)
body
首先初始化条件测试是否满足判断条件,如果满足则执行一次循环体,然后更新一次,再测试是否满足判断条件,如果满足,执行循环;反之跳出循环。注意body如果有多个语句需要花括号括起来。另外for循环中的三个条件不一定要写全,空着也行,但是要有分号,如果全部没写则就是一个死循环;同时,每一个分号里面可以写多个语句。
2、while循环
while (test-condition)
body
和for循环类似,可以改写为:
for ( ; test-expression; )
body
3、do while循环
do
body
while (test-expression);
和前面两种循环不同的是,do while循环是先执行循环体,再判断循环条件。
二、关系表达式
1、递增、递减运算符
分为前缀和后缀两种,单独使用时二者没什么区别。但是在赋值时,前缀的用法是先加1,再赋值;后缀是先赋值,再加1。虽然二者差别不大,但是学过汇编的应该可以理解前缀的用法在效率上是高于后缀用法的。因为后缀需要执行先进行拷贝。
2、赋值、比较运算符
赋值运算符是=,比较运算符是==,二者不能混淆,而且写错了编译器也不会报错。
C-风格字符串库中的strcmp函数用来比较两个字符串,参数为两个字符串,可以是指针、字符串常量和字符数组名。
如果两个字符串相同,该函数返回零;
如果第一个字符串按字母顺序排在第二个字符串之前,该函数返回一个负数;
如果第一个字符串按字母顺序排在第二个字符串之后,该函数返回一个正数。
简单一点说,如果两个字符串相等,则返回false;如果两个字符串不相等,则返回true。
三、类型别名
C++中建立类型别名有两种方式,一种是使用预处理器,例如
#define BYTE char
预处理器将在编译程序时用char替换所有的BYTE,从而使BYTE称为char的别名。
第二种方法是使用关键字typedef来创建别名,例如
typedef char BYTE;
作用也是一样,BYTE是char的别名,不过并没有像define一样在编译的时候做替换。相比而言,typedef更加的适用,她不会创建新的类型,而是只为一个已有的类型建立一个新名称,例如在cout时就可以直接使用新名称。
四、循环和文本输入
1、使用原始的cin输入
如果使用循环读取来自键盘的文本输入,则必须知道何时停止读取。一种方法是选择某个特殊的字符作为停止标记,有时候被称为哨兵字符(sentinel character)。例如:
int count = 0;
char ch;
cin >> ch;
while (ch != '#') {
cout << ch;
++ count;
cin >> ch;
}
值的注意的是,使用cin读取会忽略空格和换行符,因此,输入中的空格没有被回显,也没有被包括在计数内。更复杂的是,发送给cin的输入被缓冲。这意味着只有在按下回车键后,输入的字符才会被发送给程序。所以就会造成#后面会有输入的字符,但是程序在遇到#字符后将结束对输入的处理。
2.使用cin.get(char)进行补救
成员函数cin.get(char)读取输入中的下一个字符,即使它是空格。
int count = 0;
char ch;
cin.get(ch);
while (ch != '#') {
cout << ch;
++ count;
cin.get(ch);
}
这种方法同样输入的字符个数可能比最终到达的程序的要多。
余下部分,之后再补充。