数据类型(新手)
各位大大,我是一个初学者,有个问题让我很头疼:
运行环境:32位winxp,vc++6.0,一个解一元二次方程的程序
代码如下:
#include<stdio.h>
#include<math.h>
void main(void)
{
double a=0;
double b=0;
double c=0;
double delta=0;
double x1=0;
double x2=0;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
delta=b*b-4*a*c;
x1=(-b+sqrt(delta))/2/a;
x2=(-b-sqrt(delta))/2/a;
printf("%.2f %.2f\n",x1,x2);
}
但无论输入的系数是多少,输出值都是-0.51 -0.51。
后来我把代码改成如下:
#include<stdio.h>
#include<math.h>
void main(void)
{
float a=0;
float b=0;
float c=0;
float delta=0;
float x1=0;
float x2=0;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
delta=b*b-4*a*c;
x1=(-b+sqrt(delta))/2/a;
x2=(-b-sqrt(delta))/2/a;
printf("%.2f %.2f\n",x1,x2);
}
输出就正常了。为啥
[解决办法]
double 类型输入的时候使用lf,如:scanf("lf",&a);
[解决办法]
double类型在scanf时用%lf
scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值,而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重用的。如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量(没有提到的是,float型的为模式可能不同于double型的位模式)。
http://apps.hi.baidu.com/share/detail/16859628