在c ++中得到错误的答案

时间:2016-06-22 05:28:06

标签: c++

double getcircleArea(int radius, double pi);

double getcircleArea(int radius = 1, double pi = 3.14)
{
    return radius*radius*pi;
}

int main()
    {
        printf("area:%d\n", getcircleArea());
        printf("area:%d\n", getcircleArea(10));
        printf("area:%d\n", getcircleArea(15, 3.14159));
        system("pause");
        return 0;
    }

只是一个简单的例子。

我得到结果:

区:1374389535 面积:0 面积:-1408749273

我想要的是...... 面积:3.14 面积:314 面积:706.85775

5 个答案:

答案 0 :(得分:3)

请勿使用printf

std::cout << "area: " << getcircleArea() << "\n";

无需记住晦涩的%代码即可运作(&#34;%d?我的意思是&#39; double&#39;!&#34;)

答案 1 :(得分:2)

您的printf()格式不正确。您正在提供%d占位符,代表十进制或十进制数,但您应该为其提供%f占位符以表示浮点数。

printf("Area: %f\n", getcircleArea(10, 3.14));

Hereprintf()函数的一个很好的参考,并提供了所有可用的说明符字符。

您也可以使用标准命名空间中的cout,如下所示:

std::cout << "Area: " << getcircleArea(10, 3.14);

我还建议不要将PI作为参数传递,因为math.h中存在更精确的常量值。您可以通过执行以下操作来访问它:

M_PI

或者,正如@ M.M建议的那样,你可以通过找到-1的反余弦来得到PI,它会像这样返回PI:

double PI = acos(-1.0);

或者您可以将其设置为常量,如下所示:

const long double PI = 3.141592653589793238L;
const double PI = 3.141592653589793;
const float PI = 3.1415927;

答案 2 :(得分:1)

%d使用整数格式来打印值。如果要打印浮动,则应使用%f。

答案 3 :(得分:1)

%d用于int数据类型。将%lf用于double

#include <iostream>
using namespace std;

double getcircleArea(int radius = 1, double pi = 3.14){
    return (radius*radius*pi);
}

int main(){  
        printf("area:%lf\n", getcircleArea()); // %d --> %lf
        printf("area:%lf\n", getcircleArea(10));  // %d --> %lf
        printf("area:%lf\n", getcircleArea(15, 3.14159));  // %d --> %lf
        system("pause")
  return 0;
 }

答案 4 :(得分:1)

请尝试此代码。如果您没有在代码中创建和使用对象,那么OOP的整个目的就会失败。所以请创建和使用如下代码中所示的对象。

   #include <iostream>
   using namespace std;

   class overloading
   {
    public: 
    int getcircleArea()
    {
     cout<<"area is "<< 0 <<"\n";
    }
    double getcircleArea(int radius)
    {
     cout<<"area is "<< radius*radius*3.14<<"\n";
    }
    double getcircleArea(int radius, float pi)
    {
     cout<<"area is "<< radius*radius*pi<<"\n";
    }
   };

int main()
{
    overloading overload1;

    overload1.getcircleArea();
    overload1.getcircleArea(10);
    overload1.getcircleArea(15, 3.14159);

    return 0;
}

注意:看起来您正在练习功能重载概念。在您的代码中,您已声明了一个函数:

 double getcircleArea(int radius = 1, double pi = 3.14)
 {
 return radius*radius*pi; 
 }

.....你正在解析main程序中这个函数的其他值,如下所示:

  printf("area:%d\n", getcircleArea(15, 3.14159))

我不推荐这种节目!!

相关问题