首页 新闻 会员 周边 捐助

C语言的赋值问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-02 23:14

程序如下

#include <stdio.h>

int main(void)
{
int i;
float j;
j=i=33.3f;
printf("result is :%d\n%d\n",i,j);
return 0;
}

输出的结果是33和0 ,在《C语言程序设计现代方法》书中认为,i=33,j=33.0,请问大侠们怎么看?

takmingtsang的主页 takmingtsang | 菜鸟二级 | 园豆:202
提问于:2012-07-02 17:31
< >
分享
最佳答案
0

书上是对的,把这一行

printf("result is :%d\n%d\n",i,j);

改为

printf("result is :%d\n%f\n",i,j);

就会输出正确的结果了

c语言支持这种语法,33.3f先赋给i,由于i为int,则会取整为33。再把i的值复制给j,所以j为33.0,其实就是33

输出一个float,要用%f,而不是%f

收获园豆:5
ladd | 菜鸟二级 |园豆:209 | 2012-07-02 22:43

您的解释是正和我想问的很合适。原因是我自己在测试书上内容时没有注意灵活应用。以后会多多注意,谢谢。

takmingtsang | 园豆:202 (菜鸟二级) | 2012-07-02 23:11
其他回答(2)
0

输出的结果是33和0

应该是不可能的。

悟行 | 园豆:12559 (专家六级) | 2012-07-02 17:36

书上是没有错误的,是我测试的程序输出格式串存在问题,抱歉,麻烦您哦。

支持(0) 反对(0) takmingtsang | 园豆:202 (菜鸟二级) | 2012-07-02 23:13
0

输出的结果应该是书中说的,i=33,j=33.0,而不应该是你说的33和0。

 

这个赋值操作是先把33.3f赋值给i,由于i是整数,自动转换,变成了33

再把i的值给j,此时j是33.0

 

如果等价于:

i=33.3f;

j=i;

 

换成

i=j=33.3f

则:i:33,j:33.3f

等价于:

j=33.3f;

i=j;

无之无 | 园豆:5095 (大侠五级) | 2012-07-02 17:41

是我自己在测试时把输出的格式串弄错了,谢谢您回答。

支持(0) 反对(0) takmingtsang | 园豆:202 (菜鸟二级) | 2012-07-02 23:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册