c语言scanf返回值被忽略_scanf输入的理解

我的理解:

char 
  • %[^n]表示可以读入除n外的字符,因此会读入空白字符,因此str会存入hello world,而缓冲区此时剩余一个n
  • 再次循环,检查缓冲区,发现第一个字符是n,但是因为正则表达式为“如果是n就立即停止读入”,scanf读入结束,此时缓冲区的n依然存在,并且返回值不为EOF
  • 死循环
char 
  • scanf读入hello,读到空格立刻停止读入,此时缓冲区中剩余为:[空格]worldn
  • 再次循环,从缓冲区读入第一个字符为空格,忽略(默认的scanf会忽略前导空白符),之后依次读入world,碰到n空白符,立刻停止读入,此时缓冲区中剩余为n
  • 再次循环,从缓冲区读入第一个字符为n,忽略,发现已经读完缓冲区,处于等待输入状态。

这还引出了一个问题,难道这个n……会留在缓冲区吗,百度搜了下,好像确实是这样子……

请小心scanf函数结束时的n,它会留在缓冲区被下一个getchar()或者scanf("%c",&ch)所读入

因此可以通过这种方式读入带有空白的字符

while 

getchar会从stdin中取走一个字符,正好就把n拿跑了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值