3 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
我猜你在輸入完 1 1 后敲了別的鍵吧? 是空格嗎?
你試試連續(xù)輸入 1122,結(jié)果應(yīng)該就對(duì)了。
因?yàn)槟爿斎氲膬?nèi)容都在所謂的“輸入緩沖區(qū)”中,scanf 從緩沖區(qū)中匹配讀取。第一次循環(huán) scanf 匹配完兩個(gè)字符(1和1)后,你多按的那個(gè)鍵還留在緩沖區(qū)中。而剛好 %c 會(huì)匹配任何一個(gè)字符(包括控制字符)。所以第二次 scanf 就把上次留下的那個(gè)字符匹配給了第一個(gè) %c 并存到了 a 中。當(dāng)然第二個(gè) %d 會(huì)正常匹配到你輸入的第一個(gè) 2,存入b中。
那么 a + b 肯定就不是字符 'd' 了。至于具體是什么取決于你在第一次輸入的 11 后按了什么鍵。
而這時(shí)緩沖區(qū)中還剩下一個(gè) 2,所以 scanf 繼續(xù)匹配...
你可以加上單獨(dú)輸出 a 和 b 值的語(yǔ)句來驗(yàn)證下:printf("a=%d? b=%d\n", a, b);
如果你就是想在每組輸入多敲個(gè)鍵(回車、空格什么的)的話,也有辦法解決。在 scanf 第一個(gè)參數(shù)格式化字符串的一開始放一個(gè)空格就好了:scanf(" %c %c",&a,&b)
這是因?yàn)?scanf 格式化字符串中的空白字符會(huì)匹配任何一個(gè)或多個(gè)輸入中的空白字符(所謂空白字符包括空格、換行、tab等)。所以上次輸入后剩下的那個(gè)按鍵會(huì)被格式化字符串一開頭的這個(gè)空格匹配掉,句不影響后面 %c 匹配正常字符了。
- 3 回答
- 0 關(guān)注
- 2765 瀏覽
添加回答
舉報(bào)