C语言输入函数与缓冲区

C语言输入函数与缓冲区


调用以下输入函数,并从键盘输入内容并回车后,缓冲区的情况

函数缓冲区是否留下’\n’
scanf()yes
gets()no
getchar()yes

对于会在缓冲区留下换行符’\n’的方法,如果连续两次调用,输入完第一次以后,会自动跳过第二次输入,为什么呢?

因为实际上,C语言采用了缓冲区的机理,我们的输入的字符(包括回车)都会先存入输入缓冲区,scanf()、gets()、getchar()三个函数,实际上是读取缓冲区内容的命令,如果缓冲区中有内容,就直接读取缓冲区中的内容,只有当缓冲区中没有任何内容,才会要求键盘输入。

调用完这些函数之后是否会在缓冲区留下回车字符,是由他们读取缓冲区的方法所决定的。scanf函数根据输入格式的不同,读取的字节数会不同。当读取的是%s时,会一直读到空格或者换行符以前的字符,也就是说缓冲区会留下空格或者换行符及以后的内容。gets函数和scanf读取字符串的终止位置是一样的,只是它会自动清除紧接着的换行符。getchar函数是从缓冲区中读取一个字符,不会去掉后面的换行符。

那么对于要连续多次调用那些会在缓冲区中留下其他字符的函数,并且保证每次都提示输入,就要在第二次及以后调用之前先清空缓冲区,具体就是调用这句话:
while (getchar()!=‘\n');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值