#include <stdio.h>
int main()
{
float a = 5;
printf("%d", a);
return 0;
}
这使输出:
0
为什么是零输出?
#include <stdio.h>
int main()
{
float a = 5;
printf("%d", a);
return 0;
}
这使输出:
0
为什么是零输出?
它不打印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
。
%d
格式说明只能用类型的值使用int
。 你传递一个double
(其float
将被隐式转换为)。 得到的行为是不确定的。 有没有回答“为什么它打印0?” 题。 什么都可以被印刷。 事实上,任何事情都有可能发生。
PS
int main
,而不是void main
。 conio.h
标准C. 您应该将它转换为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
}
您需要使用%f
代替%d
- %d
只是为整数,而%f
是浮点:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=5;
printf("%f",a);
}
你必须使用一个不同的格式化字符串,只是看看http://www.cplusplus.com/reference/clibrary/cstdio/printf/
的printf( “%F”,A);
你要使用%F用于打印的浮点值。
例如
float a=5;
printf("%f",a);
正如其他人说,你需要使用%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()