2012-02-07 16 views
0

私の教授はcalculateAreaの "area"をchar/stringとして出力したいと思っています。私は彼が何を意味するかは分かりませんが、多分あなたの何人かが理解できるかもしれません。文字列ストリーム(char *)を返す

#include <iostream> 
#include "math.h" 
#include <cmath> 
#include <sstream> 
#include <string> 

using namespace std; 

const char& calculateArea(double diameter, double chord) 
{ 
    double length_1, length_2, angle; //This creates variables used by the formula. 
    angle = acos((0.5 * chord)/(0.5 * diameter)); //This calculates the angle, theta, in radians. 

    cout << "Angle: " << (angle * 180)/3.14159 << "\n"; //This code displays the angle, currently in radians, in degrees. 

    length_1 = (sin(angle)) * 6; //This finds the side of the triangle, x. 

    cout << "X: " << length_1 << " inches "<< "\n"; //This code displays the length of 'x'. 

    length_2 = (0.5 * diameter) - length_1; /*This code finds the length of 'h', by subtracting 'x' from the radius (which is half            the diameter).*/ 

    cout << "h: " << length_2 << " inches" << "\n"; //This code displays the length of 'h'. 

    double area = ((2.0/3.0) * (chord * length_2)) + ((pow(length_2, 3)/(2 * chord))); /*This code calculates the area of the                           slice.*/ 
    ostringstream oss; 

    oss << "The area is: "<< area << " inches"; 

    string aStr = oss.str(); 

    cout << "Debug: "<< aStr.c_str() << "\n"; 

    const char *tStr = aStr.c_str(); 

    cout << "Debug: " << tStr << "\n"; 

    return *tStr; 

    //This returns the area as a double. 

} 

int main(int argc, char *argv[]) { 

    double dia, cho; //Variables to store the user's input. 

    cout << "What is your diameter? "; // 
    cin >> dia;       // This code asks the user to input the diameter & chord. The function will calculate 
    cout << "What is your chord? ";  // the area of the slice. 
    cin >> cho;       // 

    const char AreaPrint = calculateArea(dia, cho); //Sends the input to the function. 

    cout << AreaPrint; //Prints out the area. 

    return 0; 
} 

私はこのかのように出力を得る:

あなたの直径は何? 12

あなたのコードは何ですか? 10

角度:33.5573

X:3.31662インチ

H:2.68338インチ

デバッグ:領域である:18.8553インチ

デバッグ:領域である:18.8553インチ

t

tStrが指す文字列を返す方法を理解する必要があります。私が言っているものが得られなかったら、申し訳ありませんが、教授が何を求めているのかは分かりません。

+0

なぜだけではなく、文字列自体を返しますか? –

+1

彼は文字列を返すように求めるのですか?私は関数から 'double'を返すことを望んでいると思います。 'main()'関数で使用します。 –

+0

ええ、私はそれを行う方法を考え出しました(二重で、文字列を返します)。文字列とすべてを返すが、それを割り当てたときにconst char *について何かがあった。だから、私は彼がそういうことを望んでいたと思っています。 –

答えて

1

文字参照ではなく文字参照を保持しています。

const char* calculateArea(double diameter, double chord) 

return tStr; // no 'content of' 

しかし、これはまだです: が何であるかをあなたがしようとしているのがより正しいバージョン

(* TSTRは「私のポインタの内容を与える」と言います)悪い:aStrが範囲外になったときに返される文字列が「範囲外」なので、実際に文字のコピーを返すか、文字列自体を返す必要があります(そして、stdのlibがあなたのためにコピーを心配させます)

const string calculateArea(double diameter, double chord) 

...

return aStr; 
+0

ええ、でも、const char *の意味は何ですか? –

+0

const char *を返すことはできますが、aStrを静的にする(破壊されないように)か、文字をコピーする必要があります。私はそれがすべてあなたがポインタやオブジェクトを学ぶことになっているものに依存すると思います。文字列を返すのが最も簡単な方法です。文字列をコピーしたいのであれば、strcpy()tStrだけですが、実際に誰がメモリを所有しているのか心配する必要があります(実際のプログラムではメモリリークを引き起こす可能性があります) – John3136

+0

水曜日にチェックして、 。これまでのすべての助けに感謝します。 –

関連する問題