2 回答

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊
首先,你這個 printf 語句的參數(shù) a[1] a[2] 間是不是少了個逗號啊。拋開這個筆誤。
你輸入的是一個字符串“ab”,不要忘了字符串結(jié)尾還有一個 \n。所以數(shù)組 a 中接受到的元素是 a b 和 \n。
printf 打印的是 a[1] 和 a[2]。數(shù)組下標(biāo)是從 0 開始的,所以打印的是 a 的第二個和第三個字符,也就是 b 和 \n。
當(dāng)然,那個 \n 只是一個回車,看不到字符的。 ?結(jié)果應(yīng)該是 b,[回車]

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊
前一個回答中我誤將 \0 寫成了 \n。
我想再詳細(xì)說明下 scanf 在讀字符串時的行為:當(dāng)格式化指示符為 %s 時,scanf 就會將輸入的內(nèi)容視為字符串,它會一個一個地接收字符直到你輸入了任何一個“空白字符”——回車、空格、tab 都算是空白字符——它就知道你字符串輸入完了,并且會自動再添加一個'\0'。 這是因為 C 規(guī)定字符串是以 '\0' 結(jié)尾的,所以它才自動添加這個 \0。
也就是說,就算我們輸入的是 a b [空格],這個字符串 a 得到的是 a b \0,而不是 a b \n。
另外,我們剛輸入的這個用來表明字符串結(jié)束的空白字符(不管是回車、空格還是tab),不會被 scanf 讀取走! ? 所以如果后面繼續(xù)用 scanf 讀 %c 的話,是會讀到這個空白字符的,這一點(diǎn)需要注意!。
- 2 回答
- 0 關(guān)注
- 1517 瀏覽
添加回答
舉報