printf()以%f打印int型有关问题
printf()以%f打印int型问题
第三个printf()在vc6.0下 语句输出27 0 0,以%f格式输出整型不会自动将整型转换为int型,
所以b输出为一垃圾值。但是为什么c输出为0啊?想不通啊。b,c都是以4个字节存储的,%f以4个字节
读去b的值,这怎么改变了c的值呢?
------解决方案--------------------
printf的格式不匹配,结果难料。
------解决方案--------------------
#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结果是不正确的,可以使用
}
------解决方案--------------------
不知道这是你自己写的还是书上写的,C语言本来就是简洁明了的,非得写的这么晦涩难懂.
楼上说的,格式不匹配,结果难以预测啊.
我把最后一句改成正确的格式,那么能够得出所有正确的值.
但是问题在于,仍然按照你写出来的最后一句,
最后一个C打印出的是花括号代码里面C的值20,也就是在这个局部域花括号结束之后,这个变量C没有销毁??
应该是销毁了的啊.但是为什么值打印出20,而不是4呢.个人觉得应该是4.如果仅仅解释为格式不匹配,感觉有点牵强啊.不知道有没有人有更好的解释.麻烦回复一下,解答一下我的疑惑..
------解决方案--------------------
因为一般%f读8个字节,所以把c也读掉了,然后下一个%d读的是垃圾数据。
下面代码可以证明,最后输入27 0.0 50
#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的值呢?
printf
自动转换
int
float
------解决方案--------------------
printf的格式不匹配,结果难料。
------解决方案--------------------
#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结果是不正确的,可以使用
}
------解决方案--------------------
不知道这是你自己写的还是书上写的,C语言本来就是简洁明了的,非得写的这么晦涩难懂.
楼上说的,格式不匹配,结果难以预测啊.
我把最后一句改成正确的格式,那么能够得出所有正确的值.
但是问题在于,仍然按照你写出来的最后一句,
最后一个C打印出的是花括号代码里面C的值20,也就是在这个局部域花括号结束之后,这个变量C没有销毁??
应该是销毁了的啊.但是为什么值打印出20,而不是4呢.个人觉得应该是4.如果仅仅解释为格式不匹配,感觉有点牵强啊.不知道有没有人有更好的解释.麻烦回复一下,解答一下我的疑惑..
------解决方案--------------------
因为一般%f读8个字节,所以把c也读掉了,然后下一个%d读的是垃圾数据。
下面代码可以证明,最后输入27 0.0 50