scanf函式允許把普通字符放在格式字串中,而且除了%c所有轉換說明都會自動跳過待輸入項前面的所有空白,所有空白包括沒有空格的特殊情況,那么如果在輸入字串中插入空白(如scanf("%d ", &a);或scanf("%d\n", &a););格式字串中的空白意味著跳過下一個輸入項前的所有空白,所以我是否能理解成這樣的操作將會導致scanf忽略第一個輸入項和第二個輸入項前的所有空白,讀取第二個輸入項,就如scanf("%*d %d",&a);一樣.。
我覺得\n不是普通字符,有兩個原因
一是scanf函式中的格式字串對于普通字符要求原樣輸入,但是例如scanf("%d\n%d", &a, &b);你不輸入\n卻可以正確讀取整數,而加上\n會導致b的讀取不正確。
二是因為在c語言中類似于\n會被定義為轉義序列而非普通字符,之所以被定義為轉義序列,是因為它無法被列印并且具有普通字符所不能體現的功能。
我再補充一下,來解釋一下,為什么你會認為它是普通字符而非轉義序列,是因為scanf("%d\n",&a);可以正確讀取,但是如果你只輸入‘\'而不輸入'n',scanf一樣可以讀取,是因為轉義序列\n是回車的意思,換行相當于空格,只不過是很多空格,而空格會跳過下一個輸入項前的所有空白,所以當你只輸第一個輸入項,會導致scanf無法正常讀取,原因是第一個輸入項后都是空白,它不知道在哪停止,所以當你鍵入第二個輸入項,無論是'\'或者是'\n'類似的字符, 都將會導致scanf明白在哪停止讀取,
如果第二個輸入項是整數,那么它也明白該在這停止,然后將第二個輸入項放回輸入,等待第二次讀取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140761.html
標籤:C語言
上一篇:大哥們我要學gglua的撰寫
下一篇:hdu+1177
