scanf函数与缓冲区

1.scanf读取失败返回EOF(EOF是文件结束的标志,值为-1)

2.控制多组输入的两个方法

     1.while(scanf("%d",&n)!=EOF)

当用户输入ctrl+zscanf停止读取(多数编译器都会,少部分不行)

或者while(~scanf("%d",&n))

~是二进制补码按位取反,当scanf读取失败返回的EOF是-1,是32个1

1111 1111 1111 1111 1111 1111 1111 1111 ,取反就是32个0,while循环不再进行

缓冲区清除的问题

首先要知道用户从键盘上输入的数据不是直接传给内存的,而是先存储到缓冲区,然后进入内存对应的变量位置

scanf遇到空格,'\n'(即回车)会停止读入,并取走前面的内容

换言之:你输入了a并回车,此时缓冲区是'a','\n'但是scanf函数只拿走了'a',此时保留'\n',这对后续读入有很大影响

因此便要清除缓冲区

1.scanf读取完加一个gets(),get遇到'\n'停下并拿走,

while(scanf("%d",&n)!=EOF)
{
      gets();//拿走回车代表的'\n'
}

2.在char类型是,scanf("%c\n",&a);加上'\n'会把'\n'一起拿走

3.或者在%c前加一个空格(代表跳过空白字符,包括'\n')

关于gets与scanf

多组输入中有初学者会用while(gets()!=EOF)来控制多组输入,

但是gets与scanf是不同的

scanf遇到EOF停止输入,返回的值-1

gets遇到EOF继续输入,返回Null(空指针,即0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值