【C语言】求解,上下两种代码有和不同,下面可以运行,上面为什么不可以

#include"stdio.h"
int main()
{
double a;
double b=0.0;
scanf("%1f",&a);
if(a<500)
b=a;
else if(a<1000)
b=a*0.95;
else if(a<3000)
b=a*0.9;
else if(a<5000)
b=a*0.85;
else
b=a*0.8;
printf("%.2f\n",b);
return 0;
}
/*
#include"stdio.h"
int main()
{
double a;
double sum=0.0;
scanf("%lf",&a);
if(a<500)
sum=a;
else if(a<1000)
sum=a*0.95;
else if(a<3000)
sum=a*0.9;
else if(a<5000)
sum=a*0.85;
else
sum=a*0.8;
printf("%.2f\n",sum);
return 0;
} */

上面的程序中是scanf("%1f",&a);有一些编译器会直接出错误,运行出错,
下面的scanf("%lf",&a);表示赋值的是double类型;


scanf("%1f",&a);

scanf("%lf",&a);