【发布时间】:2015-08-12 23:30:15
【问题描述】:
我对编程相当陌生,并且开始习惯 C。如果这是一个重复的问题,我深表歉意(我不知道底层过程,即要搜索什么)。
我正在使用一个简单的程序来适应数据类型的细微差别:
main(){
int i;
float a,b;
i = 2;
a = 2.0;
b = 4.0;
printf("%d %1.1f", i/b,a/b);
}
我希望程序打印 0 0.5(因为 a 和 b 都是浮点数,我将它们的比率打印为浮点数),但程序打印了 0 0.0(我正在使用 gcc -o)。但是,当我颠倒printf顺序(不切换对应变量的顺序)时,就是:
printf("%1.1f %d", i/b,a/b);
打印结果是 0.5 0。我不确定这里发生了什么。似乎在第一个程序中,b 在 i/b 中被转换为 int 并且未能在 a/b 中被转换为 float。但是,在第二个变体中, b 打印为两种不同的类型没有任何问题。整数不能被强制转换成浮点数吗?有人可以解释一下或指出正确的方向吗?
谢谢!
【问题讨论】:
-
你能把
gcc --version的结果贴出来吗? -
等等,这不是整数除法问题...
-
a和b都是浮点数,因此该除法的结果应该是0.5,但将其打印为浮点数会导致0.0... -
@Schwern gcc (GCC) 4.6.3 20111208 (prerelease) using gcc -o, -Wall 给出了一些有用的警告。在第一个变体上:“%d”需要“int”类型的参数,但参数 2 的类型为 double。但是,我仍然在可执行文件中得到相同的 (0 0.0) 结果。
标签: c