今天学校举行程序设计比赛,我用的是C语言,在比赛的过程中我犯了一个以前没有注意到的错误:类型转换。
错误代码如下:
float a;
scanf("%lf",&a);
printf("%f",a);
当输入1的时候,输出结果为0.000000。
改成下面这样:
double a;
scanf("%f",&a);
printf("%lf",a);
输入为1的时候,输出结果仍为0.000000。
我推测可能的原因是,scanf函数不会自动进行类型转换。
绝对正确的写法应该是:
float a;
scanf("%f",&a);
printf("%f",a);
以及,
double a;
scanf("%lf",&a);
printf("%lf",a);
要用类型转换的话:
float a;
scanf("%f",&a);
printf("%lf",a);
double a;
scanf("%lf",&a);
printf("%f",a);
所以,教训就是,scanf()函数的格式控制说明必须与变量类型一致,而printf()函数在单精度和双精度之间可以自由转换,而不需要强制类型装换。
(本人知识尚浅,如有错误,敬请指正。)