2016-10-15 7 views
-1

これは非常に単純な関数ですが、毎回同じ答えを返し続けます。4309838、理由を知りません。残業があるときはいつでも50を加えて給与計算を計算することを意味します。どんな助けもありがとうございます。C++の単純な関数は大きな値を返す - 入力に関係なく常に同じ値 - 4309838

float payCheck(int ratePar, float hoursPar) 
{ 
    if (hoursPar>40) 
     payCheck = ratePar*hoursPar + 50; 
    else 
     payCheck = ratePar*hoursPar; 
     return payCheck; 
} 
int main() 
{ 
int rate; 
    float hours, pay; 

    cout<<"Enter hours worked and pay rate "<<endl; 
    cin>>hours>>rate; 
    pay = payCheck(rate, hours); 

    cout<<"Your paycheck is "<<pay<<endl; 
} 
+4

payCheck関数でpayCheck変数を宣言していないので、どのようにコンパイルされましたか? – Asesh

+1

これはコンパイルされません。 [最小、完全で、検証可能な例]を投稿する(http://stackoverflow.com/help/mcve)。 –

+0

'payCheck = ratePar * hoursPar + 50;'この文は 'payCheck()'関数に値を代入しようとしています。最初に 'payCheck'変数を宣言してください。 –

答えて

0

payCheckメソッドでpayCheck変数を宣言していません。これは機能します:

float payCheck(int ratePar, float hoursPar) 
{ 
float payCheck; 

if (hoursPar>40) 
    payCheck = ratePar*hoursPar + 50; 
else 
    payCheck = ratePar*hoursPar; 
return payCheck; 
} 
+0

floatからintへの自動変換を避けるには、次のようにfloat()を使用します。payCheck =(float)ratePar * hoursPar + 50; – seccpur

+0

あなたが呼んでいる関数と同じ変数に名前を付けると良いでしょうか? – PaulMcKenzie

0

関数で返す変数を宣言する必要があります。

float payCheck(int ratePar, float hoursPar) 
{ 
float payCheck; //Observe this 
if (hoursPar>40) 
    payCheck = ratePar*hoursPar + 50; 
else 
    payCheck = ratePar*hoursPar; 
return payCheck; 
} 
+0

変数を関数と同じ名前にするとよいでしょうか? – PaulMcKenzie

0

給料ローカル変数(変数名から明確に変更し、私はちょうどこのようなローカル変数を導入答えに反対する問題の問題の主な原因であるの行方不明宣言しながら関数名):

​​

問題がpayCheckAmountはACTUまで()関数の目的の観点から無意味な状態にあるということです構成の場合、計算値の割り当てはのどこかで行われます。これは起こるのを待っているエラーです。ある時点で誰かになります。の場合は、すべての可能な条件をもうカバーしない方法で構造を変更し、無意味な初期値payCheckAmountの値が返されます。プログラム。

可能であれば、違法な状態にならないようにプログラムを記述してください。それを行うときには、将来起こりそうなコードの変更も予想してください。あなたは完全にローカル変数を取り除くことができの給料のために

()機能:

float payCheck(int ratePar, float hoursPar) 
{ 
    if (hoursPar > 40) { 
     return ratePar*hoursPar + 50; 
    } 

    return ratePar*hoursPar; 
} 

はしかし、これはレート*時間の計算は、コード内で重複しているという欠点があります。変更があった場合は、両方の場所を変更する必要があります。そのため、私はこの実装のために行くだろう:

float payCheck(int ratePar, float hoursPar) 
{ 
    float payCheckAmount = ratePar*hoursPar; 

    if (hoursPar > 40) { 
     payCheckAmount += 50; 
    } 

    return payCheckAmount; 
} 

限り、あなたの計算の基本的なロジックはあなたが無意味な値を返して終了することはできません「時速基本給プラス残業ボーナス」のままと。

関連する問題