c - 使用 %of 代替时分配给变量的值

标签 c programming-languages

我假设输出为 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/

相关文章:

.net - 学习避免年龄歧视的技能(特别是 .net)

programming-languages - 软件开发需要特化吗

c# - "owned"语言的危险是什么?

c - %i 或 %d 使用 printf() 在 C 中打印整数?

char** C 中的数组越界行为

c - 在 C 中使用 BSD 套接字实现 FTP

architecture - 是否有任何编程语言的变量类型大小(以位为单位)取决于平台(32 位与 64 位)?

Android 中的 connect() C 方法

C Web 服务器 - 打印传入数据?

algorithm - C中包含 '>'的矩阵列维度