#include <stdio.h>int main(){??? char a,b,c;??? while(scanf("%c %c",&a,&b)!=EOF)??? {??????? printf("%c\n",(char)(a+b));??? }??? return 0;}輸入1 1 輸出“b”接著輸入2 2 應該輸出“d”,但是輸出“RR”
為什么我的代碼第一次運行沒問題,第二次出毛?。?/h1>
3 回答

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