c程序小错误

[复制链接]
查看11 | 回复4 | 2008-7-24 11:19:09 | 显示全部楼层 |阅读模式
#include
main()
{
double a,b,c,m;
printf("输入三个双精度数:\n");
scanf("%f%f%f",&a,&b,&c);
m=(a+b+c)/3;
printf("%.1f\n",m);
}

/*#include
main()
{
double a, b, c, d;
printf("输入三个双精度数\n");
scanf("%lf%lf%lf", &a, &b, &c);
d = ( a + b + c) / 3;
printf("%.1f\n", d);
}*/
第一段是我编的 第二段是网上找的答案 但我感觉我的也没什么问题啊 可是 结果出来总是一个很大很大的数字 求原因 谢谢

回复

使用道具 举报

千问 | 2008-7-24 11:19:09 | 显示全部楼层
有问题:第一个你定义的是double型,可是输入的时候按照float型接收,那么内存中的数据就会不正确。所以,接收时要用%lf而不是%f
回复

使用道具 举报

千问 | 2008-7-24 11:19:09 | 显示全部楼层
双精度数输入是用%lf的格式符,你用%f来做当然不行了,那是单精度浮点数的格式。
回复

使用道具 举报

千问 | 2008-7-24 11:19:09 | 显示全部楼层
把 scanf("%f%f%f",&a,&b,&c);改为 scanf("%f %f %f",&a,&b,&c); // %f 间有空格,输入的时候也要空格或者 scanf("%f,%f,%f",&a,&b,&c); // %f 间有逗号,输入也要逗号没有间隔程序不知道第一个数什么时候结束,所以b和c都是随机的很大的数了
回复

使用道具 举报

千问 | 2008-7-24 11:19:09 | 显示全部楼层
因为你定义的是double型,却是以%f接收的数据,这样数据的精度就会丢失,所以你应该谨记定义的类型必须与接收数据的类型一致,double型要用%lf接收数据,float型才是%f。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行