#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
int main不是void main.conio.h标准C中没有这样的标题.您应该将其强制转换为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)
您需要使用%f而不是%d- %d仅用于整数,而%f用于浮点:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=5;
printf("%f",a);
}
Run Code Online (Sandbox Code Playgroud)