天天看點

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