2017-07-29 40 views
0

分配的參數是我創建了一個程序,可以計算圓形或方形的面積。程序功能;然而卻出現了意想不到的結果。當我輸入半徑26時,程序返回的半徑值爲1.97674e-307並且面積爲0.並且該區域的面積爲0.下面是我所擁有的...使用C++和OOP創建面積計算程序

main。 CPP

#include <iostream> 
#include "Circle.h" 
#include "Square.h" 

int main() 
{ 
    using namespace std; 
    int question; 

    cout << "Welcome to the area calculation program.\n" 
     << "I can help you calculate the area of a square or circle.\n" 
     << endl; 
    cout << "Please enter 1 to calculate the area of a circle and 2 for  a square: "; 
    cin >> question; 

    switch(question) 
    { 
    case 1: 
    { 
     cout << "Please enter the radius of the circle: "; 
     double radius; 
     Circle r(radius); 
     cin >> radius; 
     cout << "The area of a circle with a radius with a radius of " << r.getRadius() << " has an area of " << r.getArea() << endl; 
     break; 
    } 
    case 2: 
    { 
     cout << "Please enter the side of the square: "; 
     double side; 
     Square s(side); 
     cin >> side; 
     cout << "The are of a square with a side of " << side << " has an area of " << s.getArea() << endl; 
    } 
    } 
    return 0; 
} 

Circle.cpp

Square.cpp

#include "Square.h" 

Square::Square(double s) 
{ 
    side = s; 
} 

double Square::getArea() 
{ 
    return side * side; 
} 

Circle.h

const double PI = 3.1415926; 

class Circle 
{ 
private: 
     double radius; 

public: 
    Circle(double); // double is for the radius 

    double getRadius(); 
    double getArea(); 
}; 

Square.h

class Square 
{ 
private: 
    double side; 

public: 
    Square(double); 

    double getArea(); 
}; 
+0

[C++浮點精度]的可能的複製(https://stackoverflow.com/questions/2909427/c-floating-point-precision) – eyllanesc

+0

讀此:https://stackoverflow.com/questions/ 2100490 /浮點錯誤示例 – eyllanesc

回答

1

得到半徑的輸入值之前,請更改這兩個語句中,你所創建的實例的順序,所以垃圾值以實例爲半徑。

Circle r(radius); 
cin >> radius; 

cin >> radius; 
Circle r(radius); 

注:還有一件事我會強烈建議變量給予初始值,而像聲明

double radius = 0; 

這將節省你從垃圾值。希望它有幫助...

+1

夥計們,不要在睡眠不足和缺少咖啡的情況下進行編程。簡單的錯誤,如代碼的順序可能會出現。獲得的教訓,解決了問題。 – RLuck

+0

,如果出現真正的錯誤,請使用調試器,或者在輸入方法時使用舊式printf來查看發生了什麼。 – ingconti

1

你的代碼問題是在C++值和引用語義。我會分解這裏發生的事情。

double radius; 
Circle r(radius); 
cin >> radius; 

第一行聲明一個double,它會爲它保留一些內存但不會初始化它。然後第二行將採用當前未初始化的radius並使用它來構造Circle。這將用未初始化的值初始化圓半徑,這可能不會發生。

第三行調用operator>>(std::istream&, double&),用於從流cin中讀取一個double值並將其置於radius中。在這個功能中,radius拍攝,參照,如功能簽名中的&所示。該值直接存儲到您聲明的變量中。

解決此問題的最簡單方法是切換第二條和第三條線,從而在使用前初始化radius

double radius; 
cin >> radius; 
Circle r(radius);