栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输入函数(getchar(),scanf())的一些小细节(c语言篇)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输入函数(getchar(),scanf())的一些小细节(c语言篇)

今天我们讨论一下在使用输入函数 scanf(),getchar() 一些容易出错的地方,话不多说,先上代码

 

我们这段代码实现的是用户输入密码并确认的一个功能,但结果并非我们所期望的那样,在控制台中我们可以看到,当我们输入密码后还没有确认,就显示了确认失败。原因是我们在输入密码时不仅输入了" abcdef ",还敲了一次回车键,也就是输入了字符 'n' ,而我们在键盘上敲的字符并没有直接被 scanf() 函数取走,而是先放到了输入缓冲区中 ,也就是输入缓冲区中有 " abcdefn " ,而 scanf() 取走的是 " abcdef " ,剩下的 ' n ' 就会被我们的 getchar() 取走,所以还没有等我们输入,就直接确认失败了。

那下面我们就来改进一下

我们只是多加了一行代码 getchar(),其作用是取走输入缓冲区中的字符  ' n ',接下来再调用getchar()这个函数时,输入缓冲区中是空的,程序就会等待我们输入字符

这里我们可以看到达到我们的预期了, 但是如果我们换个密码重新输入呢?

这里我们可以看到又一次确认失败,原因其实很简单,是我们的 scanf() 函数在以字符串的形式进行输入的时候只会取走空格之前的字符,然后第一个 getchar() 取走了空格字符,第二个 getchar() 取走的是字符 ' a ' ,所以又一次确认失败。那如果要改进的话,就得先把输入缓冲区中的内容取干净,我们的getchar()才能获取到我们想输入的那个字符,所以请看下面的改进版。

这里我们加了一个while循环,直到getchar()获取到字符 ' n ',while循环才结束,这时输入缓冲区中也就空空如也了 控制台中也可以看出程序运行正常。

好了,今天的小细节就分享到这里了,感谢支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号