scanf()中清除输入缓冲区的几种方法归纳

2017-01-06 07:57:28来源:cnblogs.com作者:清蒸鲸鱼人点击

第七城市

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

 

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

方法一:使用scanf(“%*[^/n]%*c”):成功;解释:1.这里的星号’*’表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参量;也就是说,只要我再%后面加入星号之后,后没可以不放置接收的变量.2.scanf(“%*[^/n]%*c”)的%*[^/n]表示读入除了回车之外的字符以及读入一个字符后不保存,只有这样,才不会把我输入回车吸收,导致我不能退出程序.但是按照这种方法应该%*s应该也行,但是不行,具体不知道为啥.3.[]内是只读入限定读入的字符,如:[abcd]指的是只读入abcd的字符4.所以整行代码的解释是"%*[^/n]"首先读入缓冲区的剩余内容,%*c是读入最后一个没有读入的回车;这样就清空的输入缓冲区.方法二:使用fflush(stdin)不成功,估计和系统的机制有关,有人测试vc是ok的,但是xcode和linux系统下都不成功;方法三:使用getchar+while成功;使用while(getBuff=getchar()!=‘/n’ && getBuff!=EOF),使用循环把缓冲区的读完,直到读到缓冲区的/n或者是空值;方法四:使用gets+预留最大值成功;使用gets,创建一个数组,将缓冲区的内容读完;方法三方法四都是使用流的方式,把剩余的东西一并读完,管他是不是/n,还是这个比较舒心方法五:rewind(stdin),这个在xcode可以,真是奇怪,rewind是移动指针到开头是可以,清空输入不可以,真是奇了怪了;
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台