有关于scanf的一些小知识点

  • 再简单程序中,通常来说,我们一般只会用到一个scanf函数,但是当我们用到两个scanf函数的时候就会发现一个问题。
  • #include <stdio.h>
    int main(){
    	char a;
    	scanf("%c",&a);
    	while(a!='#')
    	{
    		...
    		...
    		
    		...
    		...
    		scanf("%c",&a);
    	}
    	return 0; 
    }

  • 如果像这样类似的程序当中,你在调试的过程当中,你会发现你输入的第二个scanf函数,你并没有输入字符就进入下一布当中了,是因为你在第一个scanf的地方,输入完了一个字符,你会摁下回车,使得程序进入下一步骤,但是这个回车会被储存在输入缓冲区内,并不是消失了,而是在你下一个scanf函数的输入时候从中调用出来,导致你第二个scanf无论输入的是什么,他都会将一个回车当作你输入的下一个字符。

  • 那么怎么解决有四种解决办法:

  • 1.

    setbuf(stdin,NULL);//清空输入缓冲区

  • 2.

    scanf("%*c");//忽略掉上一个输入的字符
                 
                 //在这里来说就是上一个你输入的scanf函数后面输入的回车被忽略了。
  • 3.

fflush(stdin)//手动清空缓冲区
  • 4.
while(getchar()!='\n'); //也可以叫做,清空之前不为回车的输入。可以做到清空一部分的缓冲区。
  • 这样问题就解决了。

  • 但是如果你要输入多个scanf函数,你需要多次用到%*c,而不是一次就能解决。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值