c程序小错误

来源:百度知道 编辑:UC知道 时间:2024/05/17 16:22:13
#include<stdio.h>
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<stdio.h>
main()
{
double a, b, c, d;
printf("输入三个双精度数\n");
scanf("%lf%lf%lf", &a, &b, &c);
d = ( a + b + c) / 3;
printf("%.1f\n", d);
}*/
第一段是我编的 第二段是网上找的答案 但我感觉我的也没什么问题啊 可是 结果出来总是一个很大很大的数字 求原因 谢谢

有问题:
第一个你定义的是double型,可是输入的时候按照float型接收,那么内存中的数据就会不正确。

所以,接收时要用%lf而不是%f

因为你定义的是double型,却是以%f接收的数据,这样数据的精度就会丢失,所以你应该谨记定义的类型必须与接收数据的类型一致,double型要用%lf接收数据,float型才是%f。

把 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都是随机的很大的数了

双精度数输入是用%lf的格式符,你用%f来做当然不行了,那是单精度浮点数的格式。