我假设输出为 8,但 s=a+b 行将值 5 赋给 s 变量,而不是 a+b 的总和。我知道我使用的是 %d 而不是 %f。
#include <stdio.h>
void summ(int, int);
int main(){
int a = 3, b = 5;
summ(a, b);
return 0;
}
void summ(int a, int b){
float s;
s = a + b;
printf("%d", s);
}
最佳答案
您不能在 printf()
中使用任何旧格式说明符。它始终必须与您传入的变量的类型相匹配。如果您想将值打印为另一种类型,则必须首先对其进行转换,然后打印转换后的值。所以要么这必须是:
void summ(int a, int b)
{
float s;
s = a + b;
printf( "%f\n", s );
}
或
void summ(int a, int b)
{
int s;
s = a + b;
printf( "%d\n", s );
}
对于 sum 函数,您不会看到明显的差异(除了 %d
不会在数字后打印“.0000”,但您可以通过向分数添加 0
的长度来抑制这种情况你的 %f
通过将其写为 %.0f
)。
OTOH,如果您有部门:
void divv(int a, int b)
{
float s;
s = a / b;
printf( "%f\n", s );
}
CPU 将执行(通常更快)整数除法。这意味着 3 / 5
(这将是 0.6
)只会给你 0
因为它不费心计算分数。编译器不会查看表达式分配给的变量类型,因此它看不到它实际上可以存储分数。它只是查看运算符的操作数(均为 int
),计算 int
,并将其扩展为 float
。因此,如果您想要精确的结果,您必须这样做:
void divv(int a, int b)
{
float s;
s = (float)a / (float)b;
printf( "%f\n", s );
}
因为只要其中一个参数是 float
,它就会执行浮点除法并计算分数。
关于c - 使用 %of 代替时分配给变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42467309/