1.if(a=\=1)
if(b==2)printf("hehe\n");
else printf("haha\n");
else总是和最近的一个if匹配
故其实为
if(a==1){
if(b==2)printf("hehe\n");
else printf("haha\n");
}
2.在循环中只要遇到break,就停止后期的所有的循环,直接终止循环
while中break的作用是永久终止循环
而continue只是终止当次循环,本次循环中 continue后边的代码不会再执行
而是跳到while语句的判断部分,进行下一次循环的入口判断
3.缓冲区
为什么要引入缓冲区
例如,我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
现缓冲区就是一块内存区, 它用在输入输出设备和CPU之间,用来缓存数据 。它 使得低速的输入输出设备和高速的CPU能够协调工作 ,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
缓冲区的三种类型
缓冲区分为三种类型:全缓冲、行缓冲和不带缓冲。
全缓冲
在这种情况下,当 填满 标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是 对磁盘文件的读写 。
行缓冲
在这种情况下,当在输入和输出中遇到 换行符 时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等 按下回车键换行 时才进行实际的I/O操作。典型代表是 标准输入(stdin) 和 标准输出(stdout) 。
不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
缓冲区的大小
如果我们没有自己设置缓冲区的话,系统会默认为标准输入输出设置一个缓冲区,这个缓冲区的大小通常是 512个字节 的大小。
缓冲区大小由 stdio.h 头文件中的宏 BUFSIZ 定义,如果希望查看它的大小,包含头文件,直接输出它的值即可:printf("%d", BUFSIZ);
缓冲区的大小是可以改变的,也可以将文件关联到自定义的缓冲区,详情可以查看 setvbuf()和 setbuf() 函数。
缓冲区的刷新(清空)
下列情况会引发缓冲区的刷新:
缓冲区满时 ; 行缓冲区遇到回车时 ; 关闭文件 ; 使用特定函数刷新缓冲区 。
4.getchar-读取一个字符
putchar-输出打印一个字符
getchar读取到字符的时候返回的是字符的ASCII码值,如果读取失败,返回的是EOF(-1)
例:#include<stdio.h>
int main(){
int ch=0;
while((ch=getchar())!=EOF){
putchar(ch);
return 0;
}
如果输入A(必须按回车才能继续),会打印出A,光标下一行
#include<stdio.h>
int main(){
printf("请输入密码");
char password[20]={20};
scanf("%s",password);
printf("请确认密码”);
int ch=getchar();
if(ch='Y')
printf("确认成功");
else printf("确认失败");
}
如果输入ABCDEF在回车继续,即缓冲区中为ABCDEF\n
getchar读取的是\n
所以可以用getchar清理缓冲区
修改:
#include<stdio.h>
int main(){
printf("请输入密码");
char password[20]={20};
scanf("%s",password);
getchar();
printf("请确认密码”);
int ch=getchar();
if(ch='Y')
printf("确认成功");
else printf("确认失败");
}
如果输入123456 abc\n
scanf默认读取到空格就结束了,scanf拿走了123456,则getchar清理的是空格
当缓冲区放的是多个字符是,一个getchar不足以清理,需要使用循环
while(getchar()!='\n';){
;
}
4.#include<stdio.h>
int main(){
char ch='\0';
while((ch=getchar()!=EOF){
if(ch<'0'||ch>'9')
continue;
putchar(ch);
}
return 0;
}
这个代码可以只打印数字字符,跳过其他字符
5.for循环(表达式1:表达式2:表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量
表达式2为条件判断部分,用于判断循环时候终止
表达式3为调整部分,用于循环条件的调整