在C ++中使用sqrt时出错

时间:2016-02-03 05:16:34

标签: c++ statistics calculator

我正在为我的统计课程编写计算器,但我的代码存在问题。这用于计算置信区间。我得到了#34;错误多个重载函数的实例"当我使用sqrt时。还有一些我无法识别的其他问题。我正在使用Visual Studio 2010并使用win32控制台应用程序。如果你能帮助我,它会帮助很多。 (我是编码的新手,所以请加上我糟糕的编码。)

  #include "stdafx.h"
  #include <cstdlib>
  #include <stdio.h>
  #include <math.h>
  #pragma warning(disable: 4996)

  int _tmain(int argc, _TCHAR* argv[])
 {
   double sample = 0, z = 0, sample1 = 0;
   double std = 0, error = 0, sampleroot = 0, error1 = 0;

   printf("What is the Z score?");
   scanf("%d\n", &z);

printf("What is the std?");
scanf("%lf\n", &std);

printf("What is the sample size?");
scanf("%d\n", &sample);

printf("What is the Error?");
scanf("%lf", &error);

//sampleroot = sqrt(sample);
error1 = z * (std/sqrt((double)sample));
sample1 = ((z * std) / error) * ((z * std) / error);

printf("Error = %lf\n", error1);
printf("Sample is %d\n", sample1);


system("pause");
return 0;
  }

那是我的新代码。当我运行它时,它只询问前3个printfs并直接跳到解决方案。我该如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

C ++中有三个sqrt函数:

double sqrt(double _X);
float sqrt(float _X);
long double sqrt(long double _X);

您将sample声明为int(可以转换为float或double),因此编译器不知道要调用哪个函数。

你可以选择你想要的那个和类型转换,sqrt((double)sample),或者你可能只想将sample声明为double。实际上,您可能希望所有int都为double

修改 在[{1}} & error之前您需要scanf("%lf", &error);我还认为您希望从\n格式中删除所有scanf()

答案 1 :(得分:0)

感谢大家帮助我。如果有人想用它来查找置信区间的错误和样本大小,那么这是工作代码。

#include "stdafx.h"
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#pragma warning(disable: 4996)

int _tmain(int argc, _TCHAR* argv[])
{
double sample = 0, z = 0, sample1 = 0;
double std = 0, error = 0, sampleroot = 0, error1 = 0;

printf("What is the Z score?");
scanf("%lf", &z);

printf("What is the std?");
scanf("%lf", &std);

printf("What is the sample size?");
scanf("%lf", &sample);

printf("What is the Error?");
scanf("%lf", &error);

//sampleroot = sqrt(sample);
error1 = z * (std/sqrt((double)sample));
sample1 = ((z * std) / error) * ((z * std) / error);

printf("Error = %lf\n", error1);
printf("Sample is %d\n", sample1);


system("pause");
return 0;
}