为什么scanf输入的小数打印后却是0?

unswimmingfish 2017-07-24 01:32:13
double arr[ ]={0};

int n;

for(n=0;n<3;n++)

{
scanf("%f",&arr[n]);

printf("%f\n",arr[n]);

}
为什么scanf输入的小数,打印后却是0?
...全文
1133 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jena_wy 2017-07-24
  • 打赏
  • 举报
回复
double arr[ ]={0};改成float arr[ ]={0};就好了
Clampard 2017-07-24
  • 打赏
  • 举报
回复
jianyue--- 2017-07-24
  • 打赏
  • 举报
回复
定义数组要明确元素个数, double arr[10 ]={0}; double arr[10 ]; 明确确定。 double arr[ ]={0,2.3,5.4,560.32}; 隐含确定,编译器为你数个数。
赵4老师 2017-07-24
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
赵4老师 2017-07-24
  • 打赏
  • 举报
回复
请检查scanf函数的返回值。
unswimmingfish 2017-07-24
  • 打赏
  • 举报
回复
引用 6 楼 jianyuezhimei 的回复:
double arr[ ]={0}; ????????????????????????
嗯,这个改了就没有报警了!,可是不是可以这样初始化数组的吗?
unswimmingfish 2017-07-24
  • 打赏
  • 举报
回复
那么我把全部改为%lf可以吗?
jianyue--- 2017-07-24
  • 打赏
  • 举报
回复
double arr[ ]={0}; ????????????????????????
自信男孩 2017-07-24
  • 打赏
  • 举报
回复
%f和%lf在内存里表示的大小不一样,一个是4字节,一个8字节。自然对于同一个数据比如1.23,在内存里浮点数也是不一样的。
unswimmingfish 2017-07-24
  • 打赏
  • 举报
回复
#define _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #include <stdio.h> int main( ) { double arr[ ]={0}; int n; scanf("%lf",&arr[0]); scanf("%lf",&arr[1]); scanf("%lf",&arr[2]); printf("Input mumber 1 is %f\n",arr[0]); printf("Input mumber 2 is %f\n",arr[1]); printf("Input mumber 3 is %f\n",arr[2]); printf("Now we have the numbers : %f,%f,%f\n",arr[0],arr[1],arr[2]); return 0; }
unswimmingfish 2017-07-24
  • 打赏
  • 举报
回复
为什么运行后出现这个?
unswimmingfish 2017-07-24
  • 打赏
  • 举报
回复
嗯,是这样的,之前怎么没发现!
战在春秋 2017-07-24
  • 打赏
  • 举报
回复 1
引用
为什么scanf输入的小数,打印后却是0?
double类型的输入输出应该用 %lf
scanf("%lf",&arr[n]);  //是字母l,可别打成数字1
printf("%lf\n",arr[n]);  //同上

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧