- ctype.h系列字符函数
1. 字符判断函数
函数名 | 为如下参数时,返回值为真 |
isalnum() | 字母或数字 |
isalpha() | 字母 |
isdigit() | 数字 |
isgraph() | 除空格之外所有的可打印字符 |
islower() | 小写字母 |
isprint() | 可打印字符 |
ispunct() | 标点符号(除空格和字符数字以外的可打印字符) |
isspace() | 空白字符 |
isupper() | 大写字母 |
2. 字符映射函数
tolower(ch); //对ch没有影响 ch = tolower(ch); //把ch转换成小写 ch = toupper(ch); //把ch转换成大写
- if和else配对
规则是如果没有花括号指明,else与和它最近的一个if相匹配。
- stdbool.h
#include<stdbool.h> int main(void) { bool isprime; isprime = false; isprime = true; return 0; }
- C语言中的与或非
&& 与;|| 或;!非
当#include<iso646.h>时,可以用and,or,not代替以上。
!优先级高于乘法,与增量同级,仅次于括号;&&高于||,二者都低于关系运算符,高于赋值运算符。
- 求值的顺序
apples = (1 + 3) * (3 + 5) //可能先计算1+3,也可能先计算3+5 //当对逻辑运算符处理时,C保证逻辑表达式是从左至右求值。 //在程序从一个操作数进到下一个操作数之前,所有的副作用都会生效。 while((c=getchar()) != '' && c != '\n') if (num !=0 && 12/num == 2) while(x++ < 10 && x + y < 20)
- 范围
if(range > 90 && range < 100) //这是对的 if(90 < range < 100) //错的 //这是个语义错误,而不是语法错误,它等价于 if((90<range) < 100) //即 if((1或0) < 100)
- 条件运算符?:
max = (a > b) ? a: b; //如果a大于b,那么max等于a,否则等于b
- switch和break
//switch判断表达式应该具有整数值(包括char) //case标签必须是整型(包括char)常量或者整数常量表达式。不能用变量
//补充:switch只做一次判断,一旦进入case环节,如果没有break就会循序执行下去,这一点与fortran不同
switch (integer expression) { case constant1: statements break; case constant2; statements break; default: statements }
- goto
1. 首先,尽量不要使用它
2. 当有多层嵌套循环,想从里层跳出时,可以考虑用goto
3. C语言中的goto允许用描述性的单词,例如:
for... for... if... goto help ... help: x = 1;
- 缓冲区
缓冲分为两类:完全缓冲和行缓冲
完全缓冲:缓冲区满时被清空(内容被发送至其目的地),通常出现在文件输入中,缓冲区的大小取决于系统,但512字节和4096字节是常见的值;
行缓冲:遇到一个换行字符时将被清空缓冲区,键盘输入是标准的行缓冲,因此按下回车键将清空缓冲区。
- 一个典型的键盘输入程序
int get_int(void) { int input; char ch; while(scanf("%d", &input) != 1) { while((ch=getchar()) != '\n') //剔除缓冲区中的错误输入 continue; } return input }
- 一个典型的文件输入程序
#include <stdio> int main(void) { int ch; //EOF=-1,所以不能用char类型,要用int FILE * fp; char fname[50]; scanf("%s", fname); fp = fopen(fname, "r"); while((ch=getc(fp) != EOF) putchar(ch); fclose(fp); return 0 }
- 换行字符
在用getchar()时特别要注意,按下回车键的同时还将一个换行字符保存在缓冲区里。缓冲区里的东西不会自己消失,都要自行处理。例如:
int score; char grade; printf("Etner the score.\n"); scanf("%s", %score); printf("Enter the letter grade.\n"); grade = getchar() /*这里getchar读取的是一个换行字符,所以需要在getchar之前剔除换行字符, 具体方法上面有*/