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

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問沒有給d賦值,為什么會輸出3呢?

#include?<stdio.h>
int?main()
{
????char?c?=?'a';
????int?n?=?c;??????//將c賦值給n
????float?f?=?c;????//將c賦值給f
????double?d?=??????//******注意看這里******
????printf("%d\n",n);
????printf("%f\n",f);
????printf("%lf\n",d);
????return?0;????
}

請問沒有為什么給d賦值,輸出結果卻為3呢?

97
97.000000
3.000000

正在回答

2 回答

你代碼第6行 double d = 后面并沒有分號,不算作語句結束,編譯器會繼續將后面的語句連起來(換行不代表語句結束),所以代碼會變成這樣:

double?d?=?printf("%d\n",?n);

就是將printf函數的返回值作為d的初值。而printf函數的原型是這樣的:

int?printf(const?char?*format,?...);

printf函數如果執行成功會返回輸出的字節數,不成功會返回一個負值。剛好這個printf語句會輸出"97\n",注意97后面還有個換行符,所以返回值是3,類型是int。這個3就會用于初始化d,這過程中會發生類型轉換,int型會轉換成double,值不變,所以d的值就是3。

還有,你在用printf輸出double和float型時,都應該使用%f,%lf并不規范。

1 回復 有任何疑惑可以回復我~
#1

j0nny

練習本身就用的%lf。。
2015-06-14 回復 有任何疑惑可以回復我~
#2

onemoo 回復 j0nny

但是用 %lf 并不規范。 這就是槽點所在:本站的C語言課程十分業余...
2015-06-14 回復 有任何疑惑可以回復我~

printf("%d\n",n);該函數有返回值,返回了輸出的字符數'9','7',\n'共三個字符,所以返回3賦值給d

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問沒有給d賦值,為什么會輸出3呢?

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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