第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

最簡(jiǎn)單的加法為什么錯(cuò)了?輸入為什么是這樣

最簡(jiǎn)單的加法為什么錯(cuò)了?輸入為什么是這樣

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貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

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

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

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

所以你應(yīng)該輸入“7 空格 9”“7 回車(chē) 9”“7 tab 9”這樣的才算正確。


逗號(hào)只是個(gè)普通字符,你輸入的“7,9”與你的格式化字符串并不匹配,scanf 無(wú)法正確地識(shí)別你的輸入,結(jié)果當(dāng)然就錯(cuò)了。

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


前面說(shuō)如果實(shí)際輸入內(nèi)容中有的地方與 scanf 中格式化字符串不匹配,那么 scanf 就會(huì)中途識(shí)別失敗,直接結(jié)束 scanf 的工作,繼續(xù)執(zhí)行后面的代碼。

你的例子中由于錯(cuò)誤地輸入了逗號(hào),導(dǎo)致 b 并未成功寫(xiě)入值。 看起來(lái) b 之前也沒(méi)有被適當(dāng)初始化,所以 b 的值會(huì)是隨機(jī)值,最后的結(jié)果也就不正確了。


如果繼續(xù)擴(kuò)展思考一下的話,你會(huì)覺(jué)得 scanf 中途識(shí)別失敗竟然就若無(wú)其事地結(jié)束了工作——不管是不是成功地接收了所有的輸入! 這樣不就無(wú)法知道在運(yùn)行時(shí)用戶(hù)有沒(méi)有正確輸入了嗎?

其實(shí)是有辦法的(scanf 不是那么不負(fù)責(zé)的)。scanf 是有返回值的,它在執(zhí)行后會(huì)返回“在識(shí)別時(shí)正確接收了的參數(shù)的個(gè)數(shù)”,程序員通過(guò)這個(gè)來(lái)判斷是否正確識(shí)別了用戶(hù)輸入的所有內(nèi)容、成功轉(zhuǎn)換接收了全部變量。

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

查看完整回答
反對(duì) 回復(fù) 2019-03-09
  • 1 回答
  • 0 關(guān)注
  • 752 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)