时间:2021-05-20
又重新过一遍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!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在C语言中是用printf函数进行输出,用scanf函数进行输入的。C++保留了C语言的这一用法。scanf函数一般格式是:scanf(格式控制,输出表列)pr
在C语言中是用printf函数进行输出,用scanf函数进行输入的。C++保留了C语言的这一用法,在此只作很简单的介绍。scanf函数一般格式是:scanf(格
前言大家都知道在C语言中,有三种主要的输入函数:scanf(),fgets()以及gets()。他们的使用方法及注意事项如下:1.scanf()它是一种格式化的
前言scanf()是C语言的格式输入函数,和printf函数一样被声明在stdio.h头文件中,它的基本使用很简单:1inta;2scanf("%d",&a);
C语言数据输入与输出实例详解1概论C语言提供了跨平台的数据输入输出函数scanf()和printf()函数,它们可以按照指定的格式来解析常见的数据类型,例如整数