所以发生的事情是我要求用户输入,然后使用scanf将其存储到变量中.
但是当我尝试检索该值时,它只是0.000000.我确定我只是犯了一个愚蠢的noob错误,但是你能提供的任何帮助都表示赞赏.
printf("Enter the radius of your circle/sphere: ");
scanf("%f", &radius);
printf("\n%f", radius);
Run Code Online (Sandbox Code Playgroud)
例如:
输入圆/球的半径:10
0.0000000
谢谢你的时间!
正如@Chris McGrath所回答的那样,你必须使用%lf双精度格式说明符.但是,这并不能解释为什么%f格式可以正常工作printf.
%lf代表很久float,即double.当类型的值float传递给可变函数(那些接受可变数量的参数,例如printf和scanf)时,它们被隐式提升为double:
float val;
printf("%f", val); /* printf receives val cast to double, the same
as printf("%f", (double) val) */
printf("%lf", val); /* printf also receives val cast to double, the
same as printf("%lf", (double) val) */
Run Code Online (Sandbox Code Playgroud)
由于两个printf("%lf", ...)和printf("%f", ...)最后接收double,两者是完全等价的.
另一方面,所有参数scanf都是指针.scanf("%f", ...)期望收到一个float *,和scanf("%lf", ...)一个double *:
float floatval;
double dblval;
scanf("%f", &floatval); /* stores a float value to address received */
scanf("%lf", &dblval); /* stores a double value to address received */
Run Code Online (Sandbox Code Playgroud)
这两个指针指向不同的类型,因此不能将其提升为另一个.如果他们接受了相同的处理scanf,它最终会将相同的值存储到为不同大小的类型分配的地址中,这不起作用.
这就是为什么在与值一起scanf使用%lf时严格要求使用说明符的原因double.
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |