C语言里面float数据用printf(“%d”)输出的问题

#include<stdio.h>main(){ float a[3]={3*0}; int i; for(i=0;i<3;i++) scanf("%f",a); for(i=0;i<3;i++) printf("%d\n",a[i]);
}
为什么输出是0?

C语言里面float数据用printf(“%d”)输出是0,是float数据使用错误造成的,解决方法如下:

1、首先在电脑中打开C-Free 5编译器(界面) -> 文件 -> 新建(Ctrl+N)。

2、然后输入下图所示代码。

3、编译成功后的截图。如果编译失败,请检查语法或者编译器是否有问题。

4、程序运行截图(开始和结束)。使用了<\b>之后没有system("cls");那么闪烁。system("cls");会清空屏幕上所有的信息。

5、最后输出结束,如下图所示就完成了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-29
C Primer Plus 第五版(中文版)P54:

注意,使用%d显示float值不会把该float值转换为近似的int值,而是显示垃圾值。与之类似,使用%f显示int值也不会把该int值转换为浮点值。而且,参数的数目不足和类型不匹配所造成的结果也将随平台的不同而不同。
。。。。。。

另外,float在计算中会自动转换成double类型。如果是64位的话,你这些输入的值用二进制,后32位数字几乎都是0,%d只处理int类型,一般是32位,因此这个以%d输出的数值当然是0了。如果你用%lld来输出的结果就不一样了。不同编译环境的结果可能不一样,因为int、double等等数据类型的大小可能不尽相同本回答被网友采纳
第2个回答  2012-06-27
首先你接收数据有误,你只接收第一个元素。
for(i=0;i<3;i++) scanf("%f",a);
修改为:
for(i=0;i<3;i++)
scanf("%f",&a[i]);

其次,输出要强制类型转换
for(i=0;i<3;i++)

printf("%d\n",a[i]);
修改为:
for(i=0;i<3;i++)

printf("%d\n",int(a[i]));

修改后:
#include<stdio.h>

void main()

{

float a[3]={3*0};

int i;

for(i=0;i<3;i++)
scanf("%f",&a[i]);

for(i=0;i<3;i++)
printf("%d\n",int(a[i]));

}追问

我知道啊。。。但是为什么有的时候用%d输出会出现错误。但是这个出现的是0?

追答

你接收数据有误,
for(i=0;i<3;i++) scanf("%f",a);//你这里用的是a,它表示首地址,所以你每次都是用第一个元素去接收数据,第二个和第三个元素根本就没有接收到数据,所以是初始值0。

追问

我也知道啊。。为什么第一个也是0呢。。

本回答被网友采纳
第3个回答  2019-11-08
为什么我做题目的时候,使用float a[3]={3*0}初始化数组是错误的。
但是使用scanf("%d",&a[i]);和使用printf("%d\n",a[0])却没错?我好迷啊
第4个回答  2012-07-06
printf("%f\n",a[i]);追问

为什么用%d输出是零?