亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的代碼第一次運行沒問題,第二次出毛???

為什么我的代碼第一次運行沒問題,第二次出毛?。?/h1>
C
qq_守夜人_11 2017-10-16 23:39:25
#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”
查看完整描述

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 匹配正常字符了。

查看完整回答
反對 回復 2017-10-17
  • qq_守夜人_11
    qq_守夜人_11
    我的兩個%c中間有空格的,敲完1空格1后接著敲的回車
  • qq_守夜人_11
    qq_守夜人_11
    我想輸入1空格1然后回車,它自動輸出b 然后我繼續輸入2空格2回車,他自動輸出d 這個該怎么實現?
  • onemoo
    onemoo
    是的,正是因為你在兩組輸入之間還按了別的鍵,所以第二次scanf執行時,第一個%c匹配到了這個額外的輸入。 其實你輸入每組中的兩個數時不必須用空格間隔開,比如你連續輸入1122都可以的。
點擊展開后面2
?
qq_虛偽的宋痞子_0

TA貢獻7條經驗 獲得超0個贊

此1非彼1,此2非彼2

查看完整回答
反對 回復 2017-10-17
  • 3 回答
  • 0 關注
  • 2778 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號