2017-02-01 7 views
-1
#include <iostream> 
    #include <iomanip> 
    #include <cmath> 

    using namespace std; 

    const double COUNTY_TAX = 0.02; 
    const double STATE_TAX = 0.04; 
    double totalSales; 
    void countyTax(double newCountyTax); 
    void stateTax(double newStateTax); 
    void total(double newTotal); 

    int main() 
    { 

     cout << "Please enter the total dollar amount of sales: $"; 
     cin >> totalSales; 

     countyTax(1); 
     stateTax(1); 
     total(1); 

     return 0; 
    } 

    void countyTax(double newCountyTax) 
    { 
     double newCountyTaxA; 

     newCountyTaxA = totalSales * COUNTY_TAX; 

     cout << "The county tax is: $" << newCountyTaxA << endl; 

    } 

    void stateTax(double newStateTax) 
    { 

     double newStateTaxA; 

     newStateTaxA = totalSales * STATE_TAX; 

     cout << "The State tax is: $" << newStateTaxA << endl; 

    } 

    void total(double newTotal) 
    { 
     double newTotalA, newStateTaxA, newCountyTaxA; 

     newTotalA = newStateTaxA + newCountyTaxA; 

     cout << "The total is: $" << newTotalA << endl; 

    } 

こんにちはみんな!私はC++でモジュールに入っていますが、上記のコードは正しくコンパイルされますが、私の出力がなぜ怪しいのか分かりません。私は適切に表示する県税と州税を取得するが、私はこの上でいくつかのフィードバックを得ることができれば、私が得る合計のショーは「$ナン」私は思っていたとき?おそらく、モジュール内で私がtotalSalesCOUNTY_TAXSALES_TAXのようなグローバル変数を使用していないことと、宣言するときにnewTotalAnewStateTaxAnewCountyTaxAが宣言されていても割り当てられていないという事実と関係があるでしょうか?ただちょっとここで混乱しています。THANKS !!!出力が間違っているのはなぜですか?

+3

スタックオーバーフローへようこそ。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+1

あなたが読むように言われた[尋ねる]:* *実際のタイトル「特定の問題をまとめたタイトルを書く」:*「なぜ私の出力が間違っている?」*さあ... –

+0

謝罪の先輩。私はちょうど私は、彼らがすべて同じスコープ内にあるように、一つのモジュールでやりたいすべての計算を置いた場合 –

答えて

1

newStateTaxAおよびnewCountyTaxAは、countyTaxおよびstateTaxで作成されて計算され、これらの機能に対してローカルです。関数が完了すると、それらの変数とそれらに含まれる値は消えます。 totalでは、同じ名前の新しいローカル変数を作成します。これらは名前の共有を除いて、以前に定義された変数とは関係がなく、以前に他の2つの関数で計算された値は保存されません。

もっとも堅牢ではないが最も簡単なソリューションは、グローバルスコープで2つの変数を作成して、totalSalesと一緒にして、2つの関数に割り当てられた値が維持されるようにすることです。

あなたは(私も使用する気にしない)グローバル変数を使用したくない場合は、あなたがあなたの主な機能でそれらを宣言し、計算値を返すために、あなたの他の機能を変更することができます。

double countyTax(double newCountyTax) 
{ 
    double newCountyTaxA; 

    newCountyTaxA = totalSales * COUNTY_TAX; 

    cout << "The county tax is: $" << newCountyTaxA << endl; 

    return newCountytaxA; 
} 
main()

のコールは、読んでいました:

newCountyTaxA = countyTax(1); 
+0

が、それはあまり建設的だろう、彼らはグローバルではない持って欲しい物を維持し、私はまだメインでモジュールを呼び出すことができますか? –

+0

@AlexChapmanすべてのグローバル変数の代替案を表示するように更新しました。 –

0

あなたは、次のコードでは、ここで基本的な間違いをしている:

void total(double newTotal) 
{ 
    double newTotalA, newStateTaxA, newCountyTaxA; 

    newTotalA = newStateTaxA + newCountyTaxA; 

    cout << "The total is: $" << newTotalA << endl; 

} 
あなたはここで作成した個の

変数「newStateTaxA」、および「newCountyTaxAは」あなたは他の方法で作成され、割り当てられている他の変数とは関係を持っていない、彼らは各メソッドのローカルです。それらをグローバルにするか、それらの関数から大切にする必要があります。

0
#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

const double COUNTY_TAX = 0.02; 
const double STATE_TAX = 0.04; 
double totalSales; 
void Taxes(); 

int main() 
{ 

    cout << "Please enter the total dollar amount of sales: $"; 
    cin >> totalSales; 

    Taxes(); 

    return 0; 
} 

void Taxes() 
{ 
    double countyTax, stateTax, total; 

    countyTax = totalSales * COUNTY_TAX; 
    stateTax = totalSales * STATE_TAX; 
    total = countyTax + stateTax; 

    cout << "The County Tax is: $" << fixed << setprecision(2) << countyTax << endl; 
    cout << "The State Tax is: $" << fixed << setprecision(2) << stateTax << endl; 
    cout << "The total is: $" << fixed << setprecision(2) << total << endl; 
} 

ここで私が思いついたのはこれです。すべてが機能し、必要に応じて出力します。私は今、私は1つのモジュールとその中の複数の計算でこのタイプのセットアップが良いプログラミングを考慮しているのだろうかと思いますか?

関連する問題