1.getchar()和putchar():专门为面向字符I/O而设计的一对C函数,仅仅能够处理字符,所以比scanf()和printf()更加简洁和快。这两个函数通常在stdio.h头文件中定义。(而且,它们通常只是预处理器宏(macro),而不是真正的函数)。
2.
while((ch=getchar()) != '\n')
上面这行代码,体现了典型的C编程风格:将两个动作合并为一个表达式。
3.ctype.h:用来分析字符的标准函数。这些函数接受一个字符作为参数,如果该字符属于某个特定的种类则返回非零值(真),否则返回零(假)。
4.else与if配对规则:如果没有花括号,else与和它最近的一个if配对。
5.逻辑运算符的优先级低于关系运算符。
6.iso646.h:改变拼写法,可以用and代替&&,or代替||,not代替!。
7.优先级:!运算符的优先级高于乘法,和增量运算符的优先级相同,仅次于圆括号。&&高于||,这两者都低于关系运算符而高于赋值运算。
8.求值顺序:除了共享操作数的情况,C通常不保证复杂表达式哪个部分先求值,如
x=(5+3)*(9+6);
C语言允许这种不确定性,以便编译器设计者可以针对特定的系统做出最有效率的选择。一个例外是逻辑运算,C保证逻辑表达式从左到右求值。&&和||是分界点,在进入右边时,所有副作用都生效,而且,一旦发现某个元素使表达式无效,求值将立刻停止。
x++<10 && x+y<20;
在进入右边时,x先加1。
9.条件运算符(?:):expression1 ? expression2:expression3;
如果1为真,值为2;否则,为3。
10.continue:用于三种循环,运行到该语句时,将导致剩余的迭代部分被忽略,开始下一次迭代。如果位于嵌套中,仅仅影响最里层的结构。
11.break:导致程序终止包含他的循环,进行到下一阶段,也只是影响最里层的循环。在for循环中,与continue不同,控制端的更新部分也将跳过。
12.switch语句:switch的判断表达式应该具有整数值(包括char),case标签类型必须是整数常量或者整数常量表达式,不能用变量。
13.goto语句:应该尽量避免使用。被标记的语句位置随意。
goto part1:
part1:printf("hello\n");