【基础】fgets()、fputs()、gets()、puts()、getchar()、putchar()的区别和清空缓存区常用的语句:

本文详细解析了C语言中的fgets()和fputs()函数,以及gets()和puts()的工作原理,特别关注了换行符的处理。同时介绍了getchar()和putchar()的作用,以及如何清理缓存区以避免潜在问题。
摘要由CSDN通过智能技术生成

这里主要是记录一些我学习C语言中的一些知识点或个人思考过程

1.fgets()-fputs()

1.1 fgets():

  fgets()比ges()安全,有三个输入量,第一个是数组地址,第二个是长度单位(实际收到的字符数量是长度减一), 第三个是选择输入方式,一般是标准输入:stdin

// 1
//输入:12345换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//分析:实际第一次循环知写入了words={‘1’,‘2’,‘3’,‘4’,‘\0’}、剩余的字符存在了缓冲区
//第二次循环把缓冲区的内容写入了words={‘5’,‘\n’,‘\0’,‘\0’,‘\0’},即fgets()是保存换行符的,
//这也是为什么fputs()输出不带换行功能,但是其输出了换行

// 2
//输入:1234换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//第一次循环:words={‘1’,‘2’,‘3’,‘4’,‘\0’},即换行符的优先级是低于最后一个字符串结尾标志符的

// 3
//输入:123换行结束
char words[5];
while((fgets(words,5,stdin)!=NULL)&&words[0]!='\n');
//第一次循环:words={‘1’,‘2’,‘3’,‘\n’,‘\0’},即换行符的优先级是低于最后一个字符串结尾标志符的
注意点就是fgets()对换行符‘\n’也存储,但是存储字符的数量等于length-1

1.2 fputs()

  fputs(),有三个输入量,第一个是数组地址,第二个是选择输出方式,一般是标准输出:stdout 输出没有自带换行功能,常与fgets搭配使用

2.fgets()-fputs()

2.1 gets():

  gets(),有1个输入量,字符串存储地址,有返回值,对换行输入进行丢弃

// 1
//输入:123换行结束
int main()
{
    char words[5];
    while ((gets(words) != NULL) && words[0] != '\n')
    {
        puts(words);
    }

    getchar();

    return 0;
}

结果如下图:
在这里插入图片描述
  gets()缺点就是其输出长度可能超出其字符串边界,但是其超出部分不会报错而是会存在缓存区,自动作为下一次的输入,所以要考虑清楚

2.2 puts()

  fputs(),有1个输入量,第一个是数组地址,输出自带换行功能,常与gets搭配使用

3.getchar()-putchar():

3.1 getchar():

   **这个就很好理解了,其一次只从缓存区取一个字符,多余的留在了缓冲区,作为下次的输入**
注意点:
  1.getchar是从缓冲区中取数据,所以在getchar之前如果有其他输入函数 如scanf会将一些字符留在缓冲区中 所以为了保险起见 可以在调用getchar之前清空缓冲区
  2. getchar会忽略回车符 当用户在键盘上输入一个字符时,通常会按下回车键,这会将字符和回车符一起发送到输入缓冲区。 如果不希望回车符被读取为字符之一 可以在读取字符后额外使用getchar去消耗回车符

3.2 putchar():

输出一个字符,如果放在循环里,它会把缓存区的内容全部取出

4.缓冲区基础及清理缓存区的常用方法

  缓存区基础:可以参考下列文章:缓存区基础及分类
这里提一个:这种方法可以称为万能清空缓存区御语句。

while((ch = getchar()) != ‘\n’ && ch != EOF)
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值