今天我们讨论一下在使用输入函数 scanf(),getchar() 一些容易出错的地方,话不多说,先上代码
我们这段代码实现的是用户输入密码并确认的一个功能,但结果并非我们所期望的那样,在控制台中我们可以看到,当我们输入密码后还没有确认,就显示了确认失败。原因是我们在输入密码时不仅输入了" abcdef ",还敲了一次回车键,也就是输入了字符 'n' ,而我们在键盘上敲的字符并没有直接被 scanf() 函数取走,而是先放到了输入缓冲区中 ,也就是输入缓冲区中有 " abcdefn " ,而 scanf() 取走的是 " abcdef " ,剩下的 ' n ' 就会被我们的 getchar() 取走,所以还没有等我们输入,就直接确认失败了。
那下面我们就来改进一下
我们只是多加了一行代码 getchar(),其作用是取走输入缓冲区中的字符 ' n ',接下来再调用getchar()这个函数时,输入缓冲区中是空的,程序就会等待我们输入字符
这里我们可以看到达到我们的预期了, 但是如果我们换个密码重新输入呢?
这里我们可以看到又一次确认失败,原因其实很简单,是我们的 scanf() 函数在以字符串的形式进行输入的时候只会取走空格之前的字符,然后第一个 getchar() 取走了空格字符,第二个 getchar() 取走的是字符 ' a ' ,所以又一次确认失败。那如果要改进的话,就得先把输入缓冲区中的内容取干净,我们的getchar()才能获取到我们想输入的那个字符,所以请看下面的改进版。
这里我们加了一个while循环,直到getchar()获取到字符 ' n ',while循环才结束,这时输入缓冲区中也就空空如也了 控制台中也可以看出程序运行正常。
好了,今天的小细节就分享到这里了,感谢支持!



