天天看点

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拿跑了。