printf指定float的整数格式字符串

ami*_*ngh 10 c printf casting

#include <stdio.h>

int main()
{
    float a = 5;
    printf("%d", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

0
Run Code Online (Sandbox Code Playgroud)

为什么输出为零?

Mar*_*off 13

它不打印5,因为编译器不知道自动转换为整数.你需要(int)a自己做.

也就是说,

#include<stdio.h>
void main()
{
float a=5;
printf("%d",(int)a);
}
Run Code Online (Sandbox Code Playgroud)

正确输出5.

比较该程序

#include<stdio.h>
void print_int(int x)
{
printf("%d\n", x);
}
void main()
{
float a=5;
print_int(a);
}
Run Code Online (Sandbox Code Playgroud)

由于声明的原因,编译器直接知道将float转换为int print_int.


AnT*_*AnT 13

%d格式说明符只能与type的值一起使用int.您正在传递double(float将隐式转换为).结果行为未定义.没有回答"为什么打印0?" 题.任何东西都可以印刷.事实上,任何事情都可能发生.

PS

  1. int main不是void main.
  2. conio.h标准C中没有这样的标题.

  • +1指出将printf()传递给double。我修复了代码,以删除多余的和不相关的#include &lt;conio.h&gt;。 (2认同)

Ree*_*sey 5

您应该将其强制转换为int以使用%d,或使用格式字符串显示不带小数精度的float:

void main() {
  float a=5;
  printf("%d",(int)a); // This casts to int, which will make this work
  printf("%.0f",a); // This displays with no decimal precision
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*yle 5

您需要使用%f而不是%d- %d仅用于整数,而%f用于浮点:

#include<stdio.h>
#include<conio.h>
void main()
{
  float a=5;
  printf("%f",a);
}
Run Code Online (Sandbox Code Playgroud)


Gab*_*bb0 4

您必须使用不同的格式字符串,只需查看 http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf("%f", a);