自动类型转换差异

kry*_*ght 1 c casting type-conversion

#include<stdio.h>

int main(){

float a,b;

a=5;
b=12;

printf("Result:%f",a+b);

return 0;   
Run Code Online (Sandbox Code Playgroud)

}

如果我将结果显示为float,我得到17.0.No问题但是我显示一个+ b为int,我得到的结果为0.

我尝试了不同的a&b值来寻找一些模式.无论a和b的值是什么,当显示为int时,a + b显示为0.

显示为float时没有问题.

我的理由是,如果我尝试将一个浮点数打印为int,则小数部分将被截断.

我错在哪里.我通过类型转换教程搜索但无法解释这种差异.

可能这是一个非常基本的疑问,但我无法推断出这种差异背后的原因.我不知道标题是否合适.请继续.

我是初学者.如果你能提供一个我可以参考这些疑问的来源,我会感激不尽,并且不会因为愚蠢的怀疑而烦扰社区.

Pas*_*uoq 5

自动类型转换差异

没有printf()基于格式字符串的参数的自动转换.的争论printf()后,第一个是根据推广默认参数促销活动,其中涉及促进floatdouble,但再次重申,不采取格式字符串考虑在内.

无论a和b的值是什么,当显示为int时,a + b显示为0.

如果你做了相同的printf("%d", a + b);,它是不正常的,因为它不应该.从技术上讲,它会调用未定义的行为.实际效果取决于编译平台,特别是参数传递约定.印刷0是其中一种可能性.

什么应该工作printf("%d", (int) (a + b));,你可以完全期望打印17.