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

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

#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