C语言清除scanf()缓存的案例讲解

 更新时间:2019年03月29日 09:58:52   作者:徐刘根  
今天小编就为大家分享一篇关于C语言清除scanf()缓存的案例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

又重新过一遍C语言,感觉每次重学C语言都有不同的感受,遇到了一个问题,就是scanf()这个问题,其实细究起来,也有很多可以值得深挖的,实际上每次细细的挖掘的话,都是对C语言的更透彻的认识.

那么下面我就对scanf()中清除输入缓冲区的方法讲解:

应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种问题,

总的思想:通过各种方法将输入缓冲区的内容读出来.

(1)清除缓存的函数是:

void safe_flush(FILE *fp)
{
 int ch;
 while( (ch = fgetc(fp)) != EOF && ch != '\n' );     
}

(2)然后我们在使用的时候,直接调用就可以了:

scanf("%d",&k);
safe_flush(stdin);

这样就可以清除缓存带来的问题了!

(3)案例演示

a.当我们不清除scanf所带来的危害的时候:

#include<stdio.h>
#include<string.h>
int main()
{
 int k;
 printf("请输入你的秘钥:(整数)");
 scanf("%d",&k);
 char c;
 printf("请输入一个字符:");
 c = getchar();
 printf("%d ",k);
 printf("%c ",c);
}

我们发现 我们输入一个整数的时候,就自动结束程序了,并且将输入的数值作为缓存给了字符c

然后我们清除缓存:

#include<stdio.h>
#include<string.h>
//用于清除回车键缓存的影响
void safe_flush(FILE *fp)
{
 int ch;
 while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
int main()
{
 int k;
 printf("请输入你的秘钥:(整数)");
 scanf("%d",&k);
 safe_flush(stdin);
 char c;
 printf("请输入一个字符:");
 c = getchar();
 printf("%d ",k);
 printf("%c ",c);
}

当我们输入整数之后,提示我们输入字符,显然消除了缓存

ok!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • C++中的多态详谈

    C++中的多态详谈

    多态通俗来说就是多种形态,本文通过实例代码给大家介绍C++中的多态定义及实现,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-05-05
  • C++之try catch 异常处理入门实例

    C++之try catch 异常处理入门实例

    我们通常希望自己编写的程序能够在异常的情况下也能作出相应的处理,而不至于程序莫名其妙地中断或者中止运行了。在设计程序时应充分考虑各种异常情况,并加以处理
    2018-01-01
  • 详解C语言中双向循环链表的实现

    详解C语言中双向循环链表的实现

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。本文将用C语言实现双向循环链表,需要的可以参考一下
    2022-06-06
  • C语言实现获取文件大小与创建修改时间

    C语言实现获取文件大小与创建修改时间

    这篇文章主要为大家详细介绍了如何通过C语言实现获取文件大小、创建时间与修改时间,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • c++实现解析zip文件的示例代码

    c++实现解析zip文件的示例代码

    这篇文章主要为大家详细介绍了如何利用c++实现解析zip文件,并对流式文件pptx内容的修改,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2023-12-12
  • QT使用QFile进行文件操作

    QT使用QFile进行文件操作

    本文主要介绍了QT使用QFile进行文件操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C/C++实现内存泄漏检测详解

    C/C++实现内存泄漏检测详解

    这篇文章主要为大家详细介绍了c++进行内存泄漏检测的方法,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2023-02-02
  • C语言实现实时钟表

    C语言实现实时钟表

    这篇文章主要为大家详细介绍了C语言实现实时钟表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言指针超详细讲解下篇

    C语言指针超详细讲解下篇

    指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。在一定意义上可以说,指针是 C 语言的精髓
    2022-04-04
  • Qt编写地图实现闪烁点图的示例代码

    Qt编写地图实现闪烁点图的示例代码

    闪烁点图的核心有三个要素,城市的名称、城市的经纬度、对应值的大小,当值越大闪烁点也就越大,本文就来实现一下地图闪烁点图,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12

最新评论