2016-04-11 34 views
0
int main() 

{ 
    double tuitionCalc(int sumCreditHoursTaken); 

    int numCourses; 
    double total = 0.0; 
    double tuitionCost= 0.0; 


    cout << "\t\t This Program calculates a student's total number of\n"; 
    cout << "\t\tcredit hours and tution for a given semester.\n"; 

    cout << "\nPlease enter the number of Courses you will be taking this semester: "; 
    cin >> numCourses; 

    for (int count = 1; count <= numCourses; count++) 
    { 
     double sumCreditHoursTaken; 
     cout << " please enter the number of credit hours for course" << count << ": "; 
     cin >> sumCreditHoursTaken; 
     total += sumCreditHoursTaken; 
    } 

    cout << fixed << showpoint << setprecision(2); 
    cout << "Your Total number of credit hours is: " << total << endl; 
    cout << "Your total tuition will be: $" << tuitionCalc(tuitionCost) << "\n\n"; 

    return 0; 
} 

と機能イム呼び出しコース数について初期化されていない?tuitionCost、ローカル変数、

double tuitionCalc(int sumCreditHoursTaken) 
{ 
    double tuitionCost = 0.0; 
    double costCreditHour = 147.00; 
    double maxHoursFullTuition = 12; 
    double maintFeeAddOn = 29.33;` 

    if (sumCreditHoursTaken <= maxHoursFullTuition) 
     cout<< " " << (sumCreditHoursTaken * costCreditHour); 
    else if (sumCreditHoursTaken > maxHoursFullTuition) 
     cout << " " << (maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn); 

    return tuitionCost; 
} 

入力が5 やクレジット時間ですが3,3,3.5,4,2.5 iは総クレジット時間を取得するが、icantは授業料を表示するようですか? は、あなたが実際にtuitionCalc()方法でtuitionCostに値を割り当てることはありませんので、それは常に0.0なります

+0

ゼロ(tuitionCost = 0)のパラメータに対して「tuitionCalc」関数を呼び出しています。 – laish129

+0

@ user26456166回答を見る – laish129

+1

私は解決策を理解してくれてありがとう! – Delo

答えて

2

よありがとう。

tuitionCosttuitionCalc()から返信しています。最初にtuitionCost = 0.0を初期化しますが、計算された値を割り当てることは決して進めません。したがって、tuitionCostを返すと、初期化した値が0.0に返されます。

+0

あなたはそれについて詳しく説明できますか? – Delo

+0

あまり詳しく説明できません。 'tuitionCal'は' tuitionCalc'関数で2回現れます。最初は0.0に設定され、2回目に返されます。 'tuitionCost'は何も設定されていないので、関数は常に0.0を返します。 – user4581301

+0

基本的には何user4581301は言った – Chara

0

あなたのコードを詳しく調べていませんが、入力に浮動小数点数が含まれている場合は、sumCreditHoursTakenの型をintからdoubleに変更してください。また

tuitionCostからtuitionCalcの呼び出しのパラメータを変更します。

0

OPが誤解の範囲と変数が関数にどのように渡されているかはわかりません。

mainでは、OPはtuitionCostを定義します。 tuitionCalcは、別のtuitionCostを定義します。これらは異なるtuitionCostです。それらはメモリ内の異なる場所を表し、異なる値を格納することができます。 tuitionCalc関数が定義されているため

次に、

double tuitionCalc(int sumCreditHoursTaken) 

tuitionCalc(tuitionCost)は、整数に変換し、それが名前sumCreditHoursTakenと一緒に使用されるtuitionCalcコピーを通過tuitionCostかかります。この時点でOPに3つのtuitionCalcがあると言うことができます。彼らが望むものではありません。

プロトタイプtuitionCalcを打破したところ、sumCreditHoursTakenという整数で、総クレジット数ではなく、使用したクレジット時間数を基にした整数であることがわかりました。 tuitionCalcdoubleを返し、それから関数の目的を推測します;その名前は、それが計算して授業料を返すと予想されます。

Anatolyと同様に、tuitionCalcへの入力はtotalとなり、計算されたクレジット時間の合計数はtuitionCostになるはずです。

これは宿題の匂いがあるので、質問に完全に答えることはOPの最善の利益ではありません。代わりに、いくつかの推奨事項があります:

tuitionCostmainから削除してください。それは混乱を増やすためだけに役立ちます。変数名を再利用することはできますが、明確な利点がある場合にのみ行います。costがあり、costを受け取り、使用する関数の場合は、両方ともcostを使用すると意味があります。あなたが参照渡ししない限り、関数内のコストは別のエンティティであることを覚えておいてください。

void function(int & cost) 

の両方cost sは同じである

function(cost); 

と呼ばれます。しかし

function(cost); 

と呼ば

void function(int cost) 

に両方functionのコストは、発信者のcostのコピーであり、機能によって行われた変更はコピーのみに影響します。

変数を使用する場所の近くに変数を宣言します。このようにしてコードを読んでいる人々は、上下にスクロールしたり、そうでなければ狩りをする必要はありません。また、「intdoubleをつけて関数を呼び出すのはなぜですか?より明らかです。

couttuitionCalcにしないでください。計算し、tuitionCostを返します。 maintuitionCostを出力させます。 calcのような名前の関数は計算する必要があります。名前は機能を可能な限り密接に記述する必要があります。

+0

私は大学生ではなく、オンラインで学んでいる私はC + +のオンラインを学んでいる、私は割り当てを入れないで、それはクラスではありませんが、あなたのフィードバックのために、私の目標は、私がうんざりしたところまで到達することでした。 – Delo

0

まず、関数プロトタイプを宣言してから宣言する必要があります。 あなたが使用したコードにいくつかの混乱がありました。私はエラーを省略するために最善を尽くしました。これは役に立ちました。

#include <iostream> 
#include <iomanip> 
using namespace std; 
double tuitionCal(double sumCreditHoursTaken); 

int main() { 

    double tuitionCalc(int sumCreditHoursTaken); 

    int numCourses; 
    double total = 0.0; 
    //double tuitionCost= 0.0; 


    cout << "\t\t This Program calculates a student's total number of\n"; 
    cout << "\t\tcredit hours and tution for a given semester.\n"; 

    cout << "\nPlease enter the number of Courses you will be taking this semester: "; 
    cin >> numCourses; 

    double sumCreditHoursTaken; // you should create this variable outside the for loop 

    for (int count = 1; count <= numCourses; count++) 
    { 
     cout << " please enter the number of credit hours for course" << count << ": "; 
     cin >> sumCreditHoursTaken; 
     total += sumCreditHoursTaken; 
    } 

    double tuitionCost=tuitionCal(total); 
    cout << fixed << showpoint << setprecision(2); 
    cout << "Your Total number of credit hours is: " << total << endl; 
    cout << "Your total tuition will be: $" <<tuitionCost<< "\n\n";// I assume this is what you want 



    return 0; 
} 

double tuitionCal(double sumCreditHoursTaken)//the parameter type is double now 
{ 
    double tuitionCost = 0.0; 
    double costCreditHour = 147.00; 
    double maxHoursFullTuition = 12; 
    double maintFeeAddOn = 29.33; 

    if (sumCreditHoursTaken <= maxHoursFullTuition) 
     tuitionCost=(sumCreditHoursTaken * costCreditHour); 
    else if (sumCreditHoursTaken > maxHoursFullTuition) 
     tuitionCost=(maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn); 

    return tuitionCost; 
    //I don't see a point of returning the value and couting both you can 
    //do only one of the oprations 
} 
+1

関数プロトタイプの 'main'の最初の行を見てください。それを置くために奇妙な場所が、まだ合法です。個人的には、私は可能な限りプロトタイプを使い果たしてしまいました。可能性の低いエラーの原因の1つ。 – user4581301

+0

おすすめ: 'costCreditHour'と友達を定数に変換してください。 'sumCreditHoursTaken'は' int'のままで、 'costCreditHour'は' int'でなければなりません。浮動小数点の不正確さのために、「二重」比較が奇妙になることがあります。 'else if'はちょうど' else'です。 '<='のテストが失敗すると、 '>'だけが残されます。 – user4581301

関連する問題