缓冲区等相关知识

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为调整部分,用于循环条件的调整

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值