#include<stdio.h>int main(){int c;scanf("%c",&c);printf("%c",c);return 0;}我輸入123得1,輸入1得1,這是怎么回事?(我將%c改為%d后,輸入1得-858993615)
1 回答
已采納

傻圓傻圓
TA貢獻(xiàn)14條經(jīng)驗 獲得超23個贊
#include<stdio.h> int?main() { char?a,?b,?c; scanf("%c",&a); scanf("%c",&b); scanf("%c",&c); printf("%c?%c?%c",?a,?b,?c); return?0; }
????首先,試著閱讀這段代碼,如果輸入123,那么輸出的結(jié)果為將為1 2 3。
????在進(jìn)行程序輸入的時候,輸入并不是直接賦值給變量,而是先保存在輸入緩沖區(qū)中,當(dāng)按下回車鍵或者緩沖區(qū)滿了的時候,才會賦值給變量。
????現(xiàn)在來模擬一下這個代碼,在鍵盤中輸入123,123將會被放入輸入緩沖區(qū),按下回車鍵后,開始向程序中寫入內(nèi)容,寫入內(nèi)容的時候遇到了第一個scanf語句,發(fā)現(xiàn)這個語句需要一個字符,則將1賦值給了變量a,然后繼續(xù)向下走,遇到了第二個scanf語句,發(fā)現(xiàn)這個語句也是需要一個字符,然后將2賦值給了變量b,然后繼續(xù)向下走,遇到了第三個scanf語句,發(fā)現(xiàn)這個語句仍然需要一個字符,然后3賦值給了變量c,此時輸入結(jié)束,并且緩沖區(qū)也變?yōu)榱丝?,程序中也沒有等待輸入的語句了,則執(zhí)行了最后的printf語句,輸出了三個變量的值。
????接下來思考你的代碼,本質(zhì)上兩個代碼的區(qū)別就是我的代碼多了兩行的scanf語句,所以知道為什么你的代碼輸入123的時候輸出是1了吧。
- 1 回答
- 0 關(guān)注
- 1135 瀏覽
添加回答
舉報
0/150
提交
取消