我是靠谱客的博主 清爽季节,最近开发中收集的这篇文章主要介绍如何正确清空cin缓存,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何正确清空cin缓存

http://blog.csdn.net/pdcxs007/article/details/45671379

区分scanf()、getch()、getchar()、getc()、gets()、cin、cin.get()、cin.getline()、getline()

 

http://blog.sina.com.cn/s/blog_67d069a90100ul7h.html




补充:


scanf("%*[^n]");
^取反或者“非”,[^n]就是除了回车什么都可以被scanf读到。*表示被读到了但是不把读到值或者字符赋值给任何变量。
%*[^n]就是读取来自键盘的出去回车外的任意字符,并不赋值给变量。
scanf("%*c");
就一个*,和上边表示一样就是读到了不赋值给任何变量。

再看,scanf("%[^n]%*c",str)读入一行字符,赋值给str变量。如果c前面没有*,那么就需要str后面再写一个char类型的ch。这就告诉你*表示读到了但是不赋值给任何变量。
那么scanf("%*[^n]%*c")这句话,应该能理解吧,两个格式控制符里面都有*,就是都读到了都不赋值变量。

读到这里你应该差不多理解了,就是你的题中的两句scanf(相当于scanf("%*[^n]%*c"))读到了你输入的abc,但是没有赋值给任何变量。然后到了gets(str4);读到了def赋值给str4,然后printf("%sn", str4);后必然显示def。

清空缓存区用fflush(stdin);这句代码。
键盘输入的东西都是放在缓冲区的这款区域,有变量过来了就带走,没有变量就在那里呆着等待一个变量来带它走。但是这个时候缓冲区里面偶尔会有一些垃圾的字符,而影响了正常的输入,有的时候用getchar()带走一个两个的字符,但是如果还是不见效一句fflush(stdin);就可以了。

最后

以上就是清爽季节为你收集整理的如何正确清空cin缓存的全部内容,希望文章能够帮你解决如何正确清空cin缓存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部