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

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

最簡單的加法為什么錯了?輸入為什么是這樣

最簡單的加法為什么錯了?輸入為什么是這樣

C
你存在我嬸嬸的腦海里 2019-03-07 22:20:54
#include<stdio.h>int main(){ int a,b,c; scanf("%d%d",&a,&b); c=a+b; printf("%d",c); return 0;}
查看完整描述

1 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

scanf 的第一個參數叫“格式化字符串”,必須按照這個格式來輸入,scanf 才能正確地把輸入的內容存到后面的變量中去。

你代碼中 scanf 的格式化字符串指定的格式是"%d%d",這要求輸入兩個整型數值。

當然輸入時必須用某種方式將兩個數值分隔開,這樣 scanf 才能知道你輸入了兩個內容——比如你想輸入 12 和 34 兩個數,如果你直接輸入 1234,scanf 無從知道這到底算是輸入了幾個數。默認情況下,能在輸入中起到分割作用的字符就是所謂的“空白字符”,即 回車、空格、tab 等。

所以你應該輸入“7 空格 9”“7 回車 9”“7 tab 9”這樣的才算正確。


逗號只是個普通字符,你輸入的“7,9”與你的格式化字符串并不匹配,scanf 無法正確地識別你的輸入,結果當然就錯了。

反之,如果你在 scanf 中格式化字符串寫的是 "%d,%d",那你就只能輸入“7,9”了。輸入“7 空格 9”什么的反而是錯的了。


前面說如果實際輸入內容中有的地方與 scanf 中格式化字符串不匹配,那么 scanf 就會中途識別失敗,直接結束 scanf 的工作,繼續執行后面的代碼。

你的例子中由于錯誤地輸入了逗號,導致 b 并未成功寫入值。 看起來 b 之前也沒有被適當初始化,所以 b 的值會是隨機值,最后的結果也就不正確了。


如果繼續擴展思考一下的話,你會覺得 scanf 中途識別失敗竟然就若無其事地結束了工作——不管是不是成功地接收了所有的輸入! 這樣不就無法知道在運行時用戶有沒有正確輸入了嗎?

其實是有辦法的(scanf 不是那么不負責的)。scanf 是有返回值的,它在執行后會返回“在識別時正確接收了的參數的個數”,程序員通過這個來判斷是否正確識別了用戶輸入的所有內容、成功轉換接收了全部變量。

你這里 scanf 返回 2 才證明 scanf 成功從你的輸入中讀取并存入了 a 和 b 兩個變量中。

查看完整回答
反對 回復 2019-03-09
  • 1 回答
  • 0 關注
  • 761 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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