printf()以%f打印int型问题

whdugh 2013-07-18 09:45:15

#include<stdio.h>

int main(void)
{
int a=1,b=2,c=3;
a += b += ++c;

printf("%5d%5d%5d\n",a,b,c);
{
float b=4.0;
int c;
a+=c=5*4.0;
printf("%5d%5.1f%5d\n",a,b,c);
}
printf("%5d%5.1f%5d\n",a,b,c);//?

}

第三个printf()在vc6.0下 语句输出27 0 0,以%f格式输出整型不会自动将整型转换为int型,
所以b输出为一垃圾值。但是为什么c输出为0啊?想不通啊。b,c都是以4个字节存储的,%f以4个字节
读去b的值,这怎么改变了c的值呢?
...全文
1191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
水平不流 2013-07-18
  • 打赏
  • 举报
回复
不知道这是你自己写的还是书上写的,C语言本来就是简洁明了的,非得写的这么晦涩难懂. 楼上说的,格式不匹配,结果难以预测啊. 我把最后一句改成正确的格式,那么能够得出所有正确的值. 但是问题在于,仍然按照你写出来的最后一句, 最后一个C打印出的是花括号代码里面C的值20,也就是在这个局部域花括号结束之后,这个变量C没有销毁?? 应该是销毁了的啊.但是为什么值打印出20,而不是4呢.个人觉得应该是4.如果仅仅解释为格式不匹配,感觉有点牵强啊.不知道有没有人有更好的解释.麻烦回复一下,解答一下我的疑惑..
mujiok2003 2013-07-18
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
printf的格式不匹配,结果难料。
++ 如果要研究,请看看IEEE 浮点数编码和va_arg宏是怎么工作的。
xspace_time 2013-07-18
  • 打赏
  • 举报
回复
#include<stdio.h> int main(void) { int a=1,b=2,c=3; a += b += ++c; printf("%5d%5d%5d\n",a,b,c); { float b=4.0; int c; a+=c=5*4.0; printf("%5d%5.1f%5d\n",a,b,c); } printf("%5d%5d%5d\n",a,b,c);//使用%f输出int型b结果是不正确的,可以使用 printf("%5d%5.1f%5d\n",a,(float)b,c);//使用%f输出int型b结果是不正确的,可以使用 }
starytx 2013-07-18
  • 打赏
  • 举报
回复
不按规则来怎么会有正确结果?整数用%d,浮点用%f
图灵狗 2013-07-18
  • 打赏
  • 举报
回复
printf的格式不匹配,结果难料。
一根烂笔头 2013-07-18
  • 打赏
  • 举报
回复
lz不是遵守规则的好孩子
xspace_time 2013-07-18
  • 打赏
  • 举报
回复
#include<stdio.h> int main(void) { int a=1,b=2,c=3; a += b += ++c; printf("%5d%5d%5d\n",a,b,c); { float b=4.0; int c; a+=c=5*4.0; printf("%5d%5.1f%5d\n",a,b,c); } printf("%5d%5d%5d\n",a,b,c);//使用%f输出int型b结果是不正确的,可以使用 printf("%5d%5.1f%5d\n",a,(float)b,*(&c-2));//也许你想要这一句
vnvlyp 2013-07-18
  • 打赏
  • 举报
回复
因为一般%f读8个字节,所以把c也读掉了,然后下一个%d读的是垃圾数据。 下面代码可以证明,最后输入27 0.0 50
#include<stdio.h>
int main(void)
{  
    int a=1,b=2,c=3,d=50;
    a += b += ++c;
     
    printf("%5d%5d%5d\n",a,b,c);
    {
        float b=4.0;
        int c;
        a+=c=5*4.0;
        printf("%5d%5.1f%5d\n",a,b,c);
    }
    printf("%5d%5.1f%5d\n",a,b,c,d);//?
    return 0;
}

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧