鱼C论坛

 找回密码
 立即注册
查看: 1597|回复: 9

[已解决]请各位大佬看一下这个代码错在哪了(很简单的)!

[复制链接]
发表于 2018-9-28 01:40:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想求的是圆的面积(用3.14159),任意输入一实数,出来圆的面积(保留两位小数),请看看(本人是小白),谢谢!


#include <stdio.h>


int main()
{
    double r,area;
    scanf("%f",&r);
    area=3.14159*r*r;
    printf("%.2f",area);

    return 0;
}
最佳答案
2018-9-28 09:27:29
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.
在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。
在用于输入时:
double 类型使用了%f格式,会导致输入值错误
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-28 02:39:00 | 显示全部楼层
scanf("%lf",&r);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 07:49:19 From FishC Mobile | 显示全部楼层
把f都改成lf试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 09:27:29 | 显示全部楼层    本楼为最佳答案   
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.
在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。
在用于输入时:
double 类型使用了%f格式,会导致输入值错误
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-9-28 09:49:16 | 显示全部楼层
楼主看看 四楼的解答就知道了  很清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 10:28:25 | 显示全部楼层
pheron 发表于 2018-9-28 09:27
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型 ...

Emmmmmmmm.....想了想有点问题,于是查了一下,结果:


问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?

答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。

对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
RIXO + 5 + 5 + 3 大佬分享的不错

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 15:08:02 | 显示全部楼层
pheron 发表于 2018-9-28 09:27
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型 ...

不会崩溃,或者说不算崩溃。scanf() 是接受指针,但是如果数据类型不匹配,将放弃修改。对未初始化的局部变量而言,会是原有的垃圾值。
printf() 是输出格式化,对数据是没有影响的 %f 默认是 6 位小数而已,double 也可以用。

float a = 0.5; //对很多编译器而言,在没有写 0.5f 的情况下,是 double 类型

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
RIXO + 5 + 5 + 3 虽然也不知道你说的对不对,我姑且信了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 15:16:53 | 显示全部楼层
claws0n 发表于 2018-9-28 15:08
不会崩溃,或者说不算崩溃。scanf() 是接受指针,但是如果数据类型不匹配,将放弃修改。对未初始化的局部 ...

如果工程比较大的话会有崩溃的可能吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 15:23:33 | 显示全部楼层
pheron 发表于 2018-9-28 15:16
如果工程比较大的话会有崩溃的可能吧

应该是说崩溃的原因不是 scanf(),而是其他的代码发现到数据类型不匹配,或者是溢出的现象才会崩溃,往往是运算结果错误。没错工程比较大的话,会有运算误差放大的问题。

所谓的崩溃应该是在当下的代码就走不下去了,scanf() 是走得下去的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 19:44:09 | 显示全部楼层
那个%f对应的是float型,你定义的double型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表