为了账号安全,请及时绑定邮箱和手机立即绑定

请问没有给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下载
官方微信