2 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
你上一次輸入的最后按了回車(chē)吧。這個(gè)換行符也留在輸入流中。
scanf 的格式化字符串中的 %c 會(huì)匹配輸入流中的任何一個(gè)字符,所以這次 scanf("%c",&ch) 會(huì)讀到 '\n' 并存入 ch 中。
scanf 的格式化字符串中的空格會(huì)匹配輸入流中的任何空白字符。所以在 %c 前加上空格,這個(gè)空格就會(huì)把之前留下的那個(gè)換行符匹配走(或者說(shuō)消耗掉了那個(gè)換行符)。后面的 %c 就能正常讀到你需要的字符了。
在連續(xù)使用 scanf("%c ... 時(shí)一定要注意這個(gè)問(wèn)題。
其實(shí) scanf("%lf"... 也是在兩次輸入之間,但它不會(huì)有這個(gè)問(wèn)題。這是因?yàn)槠渌母袷交甘痉ㄈ?lf)會(huì)忽略輸入流中的空白字符、直接去找后面有意義的字符。

TA貢獻(xiàn)4條經(jīng)驗(yàn) 獲得超1個(gè)贊
修改:
scanf("%c",&ch); while(getchar()?!=?'\n') /*?empty?loop?body*/;
變?yōu)椋?br />
scanf("?%c",&ch); while(getchar()?!=?'\n') /*?empty?loop?body*/;
在%c之前加了一個(gè)空格。程序就能正常運(yùn)行了。
但是這是為什么?
- 2 回答
- 0 關(guān)注
- 1932 瀏覽
添加回答
舉報(bào)