scanf与gets的区分

1.getsc( )函数将接收整个字符串直到回车为止。
2.scanf()函数相比gets()函数输入字符串存在一个问题,那就是输了空格之后会认为输入字符串结束,空格后字符将作为下一个输入项处理。
当然了,对于scanf也可以处理这问题。可以加入%【】,【】内可以加^任意字符(eof)来结束
字符串的输入如%【^eof】就是直到有eof输入才表示输入字符串终止。
3对于scanf的缓冲区问题
3-1 问题产生的原因:
对于函数体内连续执行两次scanf函数:
例如scanf("%c",&c);
scanf("%c",&b);
输入时我们输入字符’a’,'a’被c读取,之后回车结束,但是问题就来了,回车会转变成‘\n’符留在缓冲区内,下一句scanf函数读取字符时,即便你输入了新的字符,先读取的还是缓冲区内的‘\n’。
这是因为一般情况下,如果你使用从输入流缓冲区中读取数据的函数(scanf或者getchar),系统就会把从键盘输入的字符优先放入缓冲队列(注意,别误会,不管有没有使用从输入流读取数据的函数,系统都会把数据先输入到缓冲区,这里只是为了强调不是直接从stdin键盘缓冲区读取),直到键入回车键或者是遇到文件结束符EOF时,再从输入缓冲区逐个读取字符。
正因为如此下一句输入的字符放入输入流缓冲区(缓冲队列),这个字符前还有上一次的‘\n’,对于队列这种结构,特点是先进先出,那么
输入结束从从输入缓冲区读取字符读取的自然就是‘\n’,输入的数据则还是放在缓冲区中,以便下一次读取。
注意对于getchar也有上述问题(两个getchar连用)
3-2问题解决:
1.方法一:
scanf与getchar搭配使用
例如:scanf("%c",&a);
getchar();
2.方法二:
刷新缓冲队列:
fflush(stdin);
//这种方法在LINUX下无效,window下有效的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值