使用 %f 格式说明符打印整数值

问题描述 投票:0回答:4

c 中第一个

printf
如何影响第二个
printf

#include <stdio.h>

int main()
{
    printf("%d\n", 12.5);

    printf("%f\n", 3);

    return 0;
}

这就是为什么第二个 printf 打印 12.500000 而不是 3.00000。为什么我得到第一个 printf 的输入是第二个 printf 的输出。这里我使用gcc编译器来执行。

c printf
4个回答
0
投票

您提供了错误的格式说明符,您在整数值处使用了 %f,在双精度值处使用了 %d。你可以像下面这样改变它:

printf("%f\n", 12.5); 
printf("%d\n", 3);

0
投票

使用 %f 表示浮点数,使用 %d 表示整数。以下是更正后的代码。

#include <stdio.h>

int main() {
  
    printf("%f\n", 12.5);  // Use %f for floating-point numbers
    printf("%d\n", 3);     // Use %d for integers

    return 0;
}

0
投票

您的代码具有未定义的行为:您首先传递一个

double
值,其中
printf
期望收到
int
,然后传递一个
int
,其中
printf
期望接收
double
值。未定义的行为意味着任何事情都可能发生,包括您观察到的情况。

暂定的解释是

double
值和
int
值以不同的方式传递(例如:不同的寄存器或堆栈上的不同位置),并且在您的架构上似乎将
double
值传递给第一个
printf 
未被
printf
修改,并且在评估第二个
printf
调用时仍然存在。因此,第二个
printf
找到值
12.5
,它在其中查找
%f
格式的参数并输出相同的字符串。

这绝不是保证的,在不同的系统上,使用不同的编译器或不同的设置,或者不同的时间或根本没有任何原因,任何其他情况都可能发生。

您应该使用理智警告级别(例如:

-Wall -Wextra -Werror
)来检测此类愚蠢的错误。

您可以使用

printf
%f
格式打印整数,但必须在调用中将 int 参数转换为
double
值:

#include <stdio.h>

int main(void)
{
    printf("%f\n", 12.5);

    printf("%f\n", (double)3);

    return 0;
}

输出:

12.500000
3.000000

-1
投票

int main() { int x = 5;

// First print statement
print("The value of x is: %d\n", x);

// Second print statement
print("This is another print statement.\n");

return 0;

}

© www.soinside.com 2019 - 2024. All rights reserved.