2017-03-16 82 views
0

我不確定爲什麼CHARGE_1被評估爲.80,無論我輸入它的數量是1還是19.其他if語句也是如此。我不斷得到奇怪的數字,如.80和.64作爲輸出。請幫我弄清楚這有什麼問題。在C++中的簡單If語句練習中的邏輯錯誤

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    const int MONTHLY_FEE = 10; 
    const double CHARGE_1 = .10; 
    const double CHARGE_2 = .08; 
    const double CHARGE_3 = .06; 
    const double CHARGE_4 = .04; 
      int numChecks; 
      double charge1Total = numChecks * CHARGE_1; 
      double charge2Total = numChecks * CHARGE_2; 
      double charge3Total = numChecks * CHARGE_3; 
      double charge4Total = numChecks * CHARGE_4; 

    cout << "Please enter how many checks you have used.\n"; 
    cout << "and I will tell you how much your charge is. "; 
    cin >> numChecks; 

    if((numChecks > 0) && (numChecks < 20)) 
    { 
     cout << "Your total is $" << fixed << setprecision(2) <<  
     (charge1Total + MONTHLY_FEE) << "."; 
    } 
    else if ((numChecks >= 20) && (numChecks <= 39)) 
    { 
     cout << "Your total is $" << fixed << setprecision(2) <<  
     (charge2Total + MONTHLY_FEE) << "."; 
    } 
    else if ((numChecks >= 40) && (numChecks <= 59)) 
    { 
     cout << "Your total is $" << fixed << setprecision(2) <<  
     (charge3Total + MONTHLY_FEE) << "."; 
    } 
    else if (numChecks >=60) 
    { 
     cout << "Your total is $" << fixed << setprecision(2) << 
     (charge4Total + MONTHLY_FEE) << "."; 
    } 
} 
+2

你有檢查號碼之前計算你的總數。把它放在** cin >> numChecks; **行後面。 –

回答

0

您需要在使用它之前初始化numChecks的值。有四個地方使用未初始化的變量,這意味着值可以是任何東西。

在行

double charge1Total = numChecks * CHARGE_1; 
    double charge2Total = numChecks * CHARGE_2; 
    double charge3Total = numChecks * CHARGE_3; 
    double charge4Total = numChecks * CHARGE_4; 

numChecks可以是任何東西,所以把這些線下面的語句,你

cin >> numChecks; 
0

chargeXTotal瓦爾在編譯時進行評估,因爲你在變量定義的公式聲明爲:

double charge1Total = numChecks * CHARGE_1;

而且,由於numChecks是未初始化的變種:

int numChecks;

因此chargeXTotal每個將已經設置了一些並不像你期望的那樣從cin,所以正確的方法是保持chargeXTotal聲明cin後:

cin >> numChecks; 
double charge1Total = numChecks * CHARGE_1; 

這將使編譯器用戶輸入後計算charge1Total正確的值在編譯時使用未初始化的變種。

0

您的代碼中存在一個簡單的邏輯錯誤:您在初始化它之前使用numChecks執行數學運算。你接受numChecks輸入你用它執行後的計算:

int numChecks; // numChecks is uninitialized here; it is only defined as an int variable 

// in the following 4 calculations, you multiply CHARGE_N with an uninitialized variable 
double charge1Total = numChecks * CHARGE_1; 
double charge2Total = numChecks * CHARGE_2; 
double charge3Total = numChecks * CHARGE_3; 
double charge4Total = numChecks * CHARGE_4; 

// here you accept the input of numChecks after you have oerformed the calculations with it 
cout << "Please enter how many checks you have used.\n"; 
cout << "and I will tell you how much your charge is. "; 
cin >> numChecks; 

因爲您在執行西斯它的數學運算之前沒有初始化numChecks,在運行程序的操作,每次使用的值是未知,因爲編譯器將該變量設置爲某個默認值。一些編譯器將變量初始化爲零;但是,其他編譯器將其初始化爲一些「未知的」值。

您初始化變量numChecks的編譯器執行的數學運算和存儲的不正確價值chargeXtotal,因此,讓您的怪異值作爲輸出之後。

完成了chargeXtotal數學運算之前,您應該使得numChecks輸入取更改代碼:

int numChecks; 

cout << "Please enter how many checks you have used.\n"; 
cout << "and I will tell you how much your charge is. "; 
cin >> numChecks; 

double charge1Total = numChecks * CHARGE_1; 
double charge2Total = numChecks * CHARGE_2; 
double charge3Total = numChecks * CHARGE_3; 
double charge4Total = numChecks * CHARGE_4; 

希望這有助於!