wuta 发表于 2019-2-2 11:00:45

新人求助

#include "stdafx.h"
#include "stdio.h"
#include "math.h"
void main()
{
        float e=1,n=1,t=1,x;
        scanf("%lf",&x);
        do
        {
                t=t*x/n;
                e=e+t;
                n++;
        }while(t>=1e-5);
        printf("%lf\n",e);
}


怎么结果都是1.000000呀???

迷雾道长 发表于 2019-2-3 22:12:15

%lf是默认六位小数的,如果你要保留几位小数,就要加%.nf保留n位小数

wuta 发表于 2019-2-7 16:29:33

迷雾道长 发表于 2019-2-3 22:12
%lf是默认六位小数的,如果你要保留几位小数,就要加%.nf保留n位小数

改了,但还是都是1.00000,??

迷雾道长 发表于 2019-2-11 13:09:47

wuta 发表于 2019-2-7 16:29
改了,但还是都是1.00000,??

不可能吧,你确定%.nf改完后重新编译运行还是?

行客 发表于 2019-2-11 17:00:23

本帖最后由 行客 于 2019-2-11 17:02 编辑

这个问题出在scanf("%lf",&x);的"%lf"上。

%f是读入一个单精度浮点数,%lf是读入一个双精度浮点数。

你定义x的类型为float,所以读入方式应该为
scanf("%f",&x);

或者你把x的类型定义为double

修改代为具体如下:
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
void main()
{
      //float e=1,n=1,t=1,x;
      double e=1,n=1,t=1,x;
      scanf("%lf",&x);
      do
      {
                t=t*x/n;
                e=e+t;
                n++;
      }while(t>=1e-5);
      printf("%lf\n",e);
}


“%lf是默认六位小数的,如果你要保留几位小数,就要加%.nf保留n位小数”,这里指的是输出时的格式符:
printf("%lf\n",e);
可以改为
printf("%.3f");
表示输出小数位为3位

learn_8 发表于 2019-2-11 19:35:50

我在vs2017测试的结果和你说的一样,正确的改正方法为将格式化符号%lf改为%f,因为%lf对应的是double类型,%f对应的是float类型,scanf函数通过指针指向变量,%f告诉scanf函数指向的位置是一个float类型,%lf告诉scanf函数指向的位置是一个double类型,所以你定义用的是float,那么输入输出就应该用%f
页: [1]
查看完整版本: 新人求助