C语言初学------(二)关于输入输出的缓存

本文探讨了为何在C语言中使用缓存,介绍了全缓存、行缓存与无缓存的区别,展示了Linux与Windows平台的差异,并提供了清除缓存的方法。重点讲解了如何在实际开发中利用这些缓存机制以优化交互速度和资源利用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入输出缓存


前言

当使用键盘鼠标等输入设备以及显示器等输出设备时,会涉及到缓存,包括全缓存,行缓存以及不缓存

一、为什么使用缓存

在日常使用中,如果没有缓存,那么我们输入数据后会立即显示在输出设备上,虽然这种输出很快,但是并不能输出我们想要的数据,它的输出将会是单字符的形式,那么我们要输出一个完整的字符串就必须多次输出,增加了与输出设备的交互,降低了交互速率
因此我们需要用到缓存来实现减少交互,降低交互过多带来的影响

二、如何使用缓存?

缓存是系统自带,或者说语言自带的,根据不同的方法,会有不同的缓存形式,并不需要我们去关心,我们需要关心的只是在合适的时间地点使用合适的方式方法

三、使用步骤

1.引入库

#include <stdio.h>
#include <windows.h>
#include <unistd.h>
#include <conio.h>

同样还是基础库,我们通过scanf,gets,getch,getcher,printf来查看缓存的影响
注:getch,getcher都属于非标准库,因此需要引入conio.h

2、缓存类型

1、全缓存

当缓存区域内数据量达到一定程度会输出,并清空缓存区域,那么就叫做全缓存,比如写文件

2、行缓存

当遇到换行符时输出,叫行缓存,我们一般开发中用到的都是行缓存,需要用到换行符或者直接回车才会输出

int main(){
    char str1[3];
    scanf("%s",&str1);
    printf("这是行缓冲数据:%s",str1);
}

在这里插入图片描述

3、无缓存

无缓存,比如getch以及getche都属于无缓存,输入之后并不需要特殊的字符标识,就立即输出

int main(){
    char str;
    str = getch();
    printf("这是无缓冲数据:%c",str);
}

在这里插入图片描述

4、linux平台同window的区别

int main(){
    printf("你好啊");
    sleep(5);
    printf("  世界");
}

当我们在window下输出时,并没有发现linux下缓存的情形,window会在五秒后直接输出第一个字符串,如图一,但是linux下会发现并没有直接输出第一个字符串,而是在五秒后与第二个字符串一同输出,如图二(因为最后结果是乱码,所以并没有放出最后的图片)
window图一
linux图二

5、清除缓存

1、通过添加 \n 换行符进行输出
int main(){
    printf("你好啊 \n");
    sleep(5);
    printf("  世界");
}

在这里插入图片描述

2、通过正则表达式清除
int main(){
    scanf("%*[^\n]"); 
    scanf("%*c"); //在下次读取前清空缓存区
}

注:

在我切换到window系统库的时候也就是MinGW的时候,发现,会出现中文输出乱码,但是输入接收不会乱码的情况
在这里插入图片描述
解决方案:C语言使用MinGW出现输出中文乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值