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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、最后输出结束,如下图所示就完成了。

参考技术A C Primer Plus 第五版(中文版)P54:

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

另外,float在计算中会自动转换成double类型。如果是64位的话,你这些输入的值用二进制,后32位数字几乎都是0,%d只处理int类型,一般是32位,因此这个以%d输出的数值当然是0了。如果你用%lld来输出的结果就不一样了。不同编译环境的结果可能不一样,因为int、double等等数据类型的大小可能不尽相同
参考技术B 为什么我做题目的时候,使用float a[3]=3*0初始化数组是错误的。
但是使用scanf("%d",&a[i]);和使用printf("%d\n",a[0])却没错?我好迷啊
参考技术C 首先你接收数据有误,你只接收第一个元素。
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呢。。

参考技术D printf("%f\n",a[i]);追问

为什么用%d输出是零?

以上是关于C语言里面float数据用printf(“%d”)输出的问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言中printf输出float和double都用%f么(scanf又如何)

C语言初级问题求解=。= 为什么我的这段程序用int %d可以算 但是用float %f却运行不了呢?

c语言 float型数据输入需要注意啥吗

c语言float类型输出

C语言,如何给3个char变量赋值?不能直接char a='D',这种。要求用printf,scanf.

请教一下有关C语言用(float)强制转换的用法