我的了解:
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拿跑了。