为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]
Posted
技术标签:
【中文标题】为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]【英文标题】:Why in my c program when I use double it only puts out 0, but when I instead use float it works? [duplicate]为什么在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制] 【发布时间】:2022-01-22 09:50:25 【问题描述】:当我使用浮点数时,像这样:
#include <stdio.h>
int main()
float g;
float f;
scanf("%f", &f);
g = f / .5;
printf("%f", g);
return 0;
然后输入 2 我得到 4.000。当我使用double
代替float
时,结果始终为0.000。为什么我错过了什么?
【问题讨论】:
当我使用 double 代替 float 时,结果始终为 0.000。 ...因为您需要scanf("%lf", &f);
来获得 double
如果可能,请使用更好的编译器,或启用更多警告。现代编译器会准确地告诉你你在这里做错了什么。
@SteveSummit 您建议使用哪些 c 编译器?我才刚刚开始。
【参考方案1】:
#include <stdio.h>
int main()
double g;
double f;
scanf("%lf", &f);
g = f / .5;
printf("%lf", g);
return 0;
您需要在此处使用专门用于双精度的格式说明符 (%lf
)。
有关不同格式说明符的更多信息,请参阅format string specifications。
【讨论】:
谢谢。我以为我试过了,但显然我搞砸了。【参考方案2】:作为,Scanf not reading in double,
您对编译器撒谎:扫描时,%f
说您提供了指向 float
的指针。但是您提供了指向double
的指针。
要修复,请使用%lf
或将输入声明为float
。
请注意,printf
格式存在不对称性,%f
用于 float
和 double
参数。这是因为printf
参数被提升为double
(并且不是指针)。
【讨论】:
以上是关于为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?
为啥我会从“double”转换为“float”,可能会丢失数据警告?(c)
当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405