C语言中使用while循环清理缓冲区

编程入门 行业动态 更新时间:2024-10-10 23:25:52

C语言中使用while循环清理<a href=https://www.elefans.com/category/jswz/34/1768630.html style=缓冲区"/>

C语言中使用while循环清理缓冲区

代码分析:

为什么这里我们还没有输入字符但是程序就已经读取到字符并且已经执行完毕了呢?

首先我们要了解scanf和getchar的工作原理:scanf和getchar并不是直接去键盘上读取数据和字符,而是在他们和键盘之间有一个缓冲区,scanf和getchar都会去缓冲区读取。

首先进行读取的是scanf,它会将123456全部读取放到整型数组password中,然后getchar会进行读取操作,在我们输入完密码时要按回车键来让scanf确认密码输入完成,但是这个回车键也就是 '\n' 字符并不会被scanf读取,而是放到了缓冲区中;当getchar进行读取时缓冲区中这时候只有 '\n' 这个字符,那么getchar就会把这个字符读走。这样的话程序就执行完毕了,显然 '\n' 不是字符 'Y',所以会打印输出“确认失败”。

那么我们怎么解决这个问题呢?

现在一直在干扰我们的就是缓冲区中没有被scanf读取的字符 '\n' ,这个字符影响了我们的下一步输入和读取和输入操作,那么我们只要清理了这个字符是不是程序就可以正常执行了。我们可以在读取字符操作前面再加一个读取字符操作将这个字符 '\n'取走。

 

 这样程序就能按照我们所设想的那样来执行了,但是如果我们的密码中有也存在字符那么这个操作是否就会失效呢?

 

当我们的密码是复杂密码是(可能包含空格字符等),显然问题并不是多了一个换行符那么简单了。那么现在我们应该怎么实现我们想要的功能呢?

 

 我们可以使用while循环语句来进行清理缓冲区中多个字符的操作,我们先定义一个整形变量tmp用来存放读取的多余字符,当我们从缓冲区读取到的字符不是换行符  '\n'  时,程序不进行任何操作,然后再次进入循环;当我们读取到的字符为换行符 '\n' ,这时他已经被读取走了,不在缓冲区中了,这时的缓冲区是没有任何字符的,我们就可以进行下面的读取字符确认密码的操作了。

 使用while循环清理缓冲区的原理就是这样,但是这里只是描述了一下原理,实际应用中不会出现像这种只能是数字密码的,这里只是说明while循环的一种应用。

更多推荐

C语言中使用while循环清理缓冲区

本文发布于:2024-03-04 03:57:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1708208.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:缓冲区   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!