C语言scanf()与getchar()解析

scanf()

函数会根据参数中的转义说明获取对应的值的类型,在获取值的时候会自动跳过前面的若干空格、制表符以及换行符(\n),如下图所示。


scanf()只会获取第一个符合转移说明的值,如果没有获取到那么原本输入队列中的值不会改变,仍旧在输入队列中。

scanf()只会回去1,而剩下的abc仍旧保存在输入队列,被后面的getchar()获取


getchar()

getchar()会获取字符,包括空格、制表符换行符等等。


当输入1的时候按下enter键表示输入完成,由于我们是行缓冲,所以再按下enter的时候会将键盘缓冲送入输入队列,然后scnaf()去掉空白,并读入一个1,但是此时输入队列中还剩下一个换行符,继而被下面的getchar()获取。

scanf("%*s")

这个函数被经常用来跳过非法的输入,在输入队列中读取当前的字符串,直到遇到空白为止,应为scanf()用空白来隔开输入。

首先看一下这个程序


这足以说明当scanf()在读取输入队列中的值的时候如果和参数中的转义说明不符并不会读取该值并且会将其放回到输入队列中,所以造成死循环。

我们改进以下程序

利用scanf("%*s")清空当前的输入队列达到预想的效果。

posted @ 2022-11-29 17:38  破忒头头  阅读(158)  评论(0)    收藏  举报