printf的指定浮动整数格式字符串(printf specify integer format s

2019-09-01 15:35发布

#include <stdio.h>

int main()
{
    float a = 5;
    printf("%d", a);
    return 0;
}

这使输出:

0

为什么是零输出?

Answer 1:

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

也就是说,

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

正确地输出5。

相比之下,与程序

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

其中,直接编译知道要浮动转换为int,由于申报print_int



Answer 2:

%d格式说明只能用类型的值使用int 。 你传递一个double (其float将被隐式转换为)。 得到的行为是不确定的。 有没有回答“为什么它打印0?” 题。 什么都可以被印刷。 事实上,任何事情都有可能发生。

PS

  1. 这是int main ,而不是void main
  2. 还有,因为没有这样的标题conio.h标准C.


Answer 3:

您应该将它转换为int使用%d,或使用格式字符串显示浮动不带小数精度:

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
}


Answer 4:

您需要使用%f代替%d - %d只是为整数,而%f是浮点:

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


Answer 5:

你必须使用一个不同的格式化字符串,只是看看http://www.cplusplus.com/reference/clibrary/cstdio/printf/

的printf( “%F”,A);



Answer 6:

你要使用%F用于打印的浮点值。

例如

float a=5;
printf("%f",a);


Answer 7:

正如其他人说,你需要使用%f格式字符串或转换a为int。

但我想指出的是您的编译器,大概,知道printf()的格式字符串,可以告诉你,你用错了。 我的编译器,用适当的调用( -Wall包括-Wformat ),这样说:

$ /usr/bin/gcc -Wformat tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’

$ /usr/bin/gcc -Wall tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’

$

哦,还有一两件事:你应该包括“\ n” printf()保证输出发送到输出设备。

printf("%d\n", a);
/*        ^^ */

或使用fflush(stdout);printf()



文章来源: printf specify integer format string for float
标签: c casting printf