1.缓冲区(内存空间预留的存储空间)
可有效减少IO设备的操作以及提高计算机运行速度。
类型:
全缓冲:只有填满缓冲区才进行IO操作。Windows全缓冲4096字节,Linux全缓冲1024字节。
行缓冲:输入输出遇到换行符就进行IO操作。
不缓冲:标准出错情况stderr,使得出错信息立马显示。
引发缓冲区刷新事件:
1.输出缓冲区属于行缓冲
2.缓冲区溢满(溢出)
3.执行fflush(stdout),手动刷新缓冲区
设置缓冲区类型:
setvbuf(指定对象,缓冲区容器(仅限全缓冲),缓冲类型,缓冲区大小);
指定对象:stdout(标准输出对象)、stdin(标准输入对象)、stderr(标准错误)
char buf[100];
setvbuf(stdout,buf,_IOFBF,1024);
setvbuf(stdout,NULL,_IOLBF,0);
setvbuf(stdout,NULL,_IONBF,0);
scanf/printf:
scanf(“%c %d”, &a, &b);必须严格按照scanf内部的“%d %d”来进行输入,否则如:输入abcd 10,此时仅仅只有a被输入,而bcd还存在缓冲区中,10就给不到b。
注意:
获取字符失败,则需要清除缓冲区
while (getchar() != ‘\n’);
判断字符是否获取失败
int a = scanf(“%d %d”,&b,&c);查看a是否等于2
printf(“%.2f\n”,a);控制格式
2.运算符
(1)算术运算符
单目运算符:++ -- int i = 3;int ret = i+++i++ ret=7 i=5
双目运算符:+ - * / %(取余)
注意:
整数相除为整数,小数舍弃
取余运算符两边必须为整数
(2)关系运算符
> < = >= <= != ==
(3)逻辑运算符
逻辑反:! 逻辑与:&&(有假为假) 逻辑或:||(有真为真)
惰性运算:
int a = 1;
int b = 2;
int ret = a>b && (++a);
注意:ret从左到右,a>b为假,此时后续就不再计算,++a就不生效,整个式子直接返回结果假。
(4)位运算符
按位取反:~ 按位与:&(有0为0) 按位或:|(有1为1)
按位异或:^(相同为0) 左移:<< 右移:>>
注意:
无符号移位,移出去丢掉,空出来补0
有符号移位,左移同上,右移空出来补符号位
(5)赋值运算符
赋值:=
复合:+= -= /= |= >>= <<=
(6)特殊运算符
三目:表达式1?表达式2:表达式3
表达式1为真,则结果为表达式2;
表达式1为假,则结果为表达式3;
逗号:(表达式1,表达式2,...,表达式n)
整个逗号表达式的值为表达式n的值
有如下例子:
int a=3,a=6*a,a*3 a=18
int a=3,6*a a=3
int a=3; a=(a+3,a=a+4) a=10
int a=3; a=(a+3,a*4,a+4) a=10
特别注意:
无括号:看是否有赋值号,有则需要进行变值,没有则不用管;
有括号:同样看是否有赋值号,有则需要变值,且括号内的第一个表达式会一般赋值,若没有则直接跳转到最后一个“表达式n”即为整个式子的数值;
优先级:[]() > ++ -- > 算术 > << >>(移位) > 关系 > 位(&^|) > 逻辑(&& ||) > 赋值 > 逗号 算术关系位逻辑赋值