无法初始化变量

问题描述:

下面是我正在编写的用于学习如何在C++中使用文件的代码。我有一切正确的阅读和写作,但我无法让我的显示器显示正确的值,因为它忽略了当我尝试在while循环中初始化总变量。无法初始化变量

#include <iostream> 
#include <iomanip> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    int customerNumber; 
    double beginningBalance, purchase, payments, financeCharge, endingBalance; 
    double beginningTotal, purchaseTotal, paymentsTotal, financeChargeTotal, endingTotal; 
    ifstream inputFile; 
    ofstream outputFile; 

    inputFile.open("BeginningBalance.dat"); 
    outputFile.open("EndingBalance.dat"); 
    cout<<"Cust No | Beginning Bal | Finance Charge | Purchases | Payments | Ending Balance"<<endl; 

    while (inputFile >> customerNumber) 
    { 
     outputFile <<customerNumber<<endl; 
     inputFile >> beginningBalance; 
     inputFile >> purchase; 
     inputFile >> payments; 

     financeCharge = beginningBalance * .01; 
     endingBlanance= beginningBalance + purchase + financeCharge - payments; 

     //*********************************************** 
     //This is where I am having trouble initializing variables. 
     //*********************************************** 
     beginningTotal += beginningBalance; //beginningTotal not being intitialized. 
     financeChargeTotal += financeCharge; 
     purchaseTotal += purchase; 
     paymentsTotal += payments; 
     endingTotal += endingBalance; 

     outputFile <<fixed<<setprecision(2)<<endingBalance<<endl; 

     cout<<setw(5)<<customerNumber<<fixed<<setprecision(2)<<"  "<<beginningBalance<<"  "<<financeCharge<<"   "<<purchase<<"  "<<payments<<"  "<<endingBalance<<endl; 
    } 
    cout<<"Total: "<<fixed<<setprecesion(2)<<beginningTotal<<" "<<financeChargeTotal; 
    system ("PAUSE"); 
    return 0; 
} 

您没有首先初始化变量,所以它们没有任何初始值。然后你给这些变量添加一些东西,结果是未定义的(阅读垃圾)。

考虑宣布他们是这样的:

double beginningTotal = 0, purchaseTotal = 0, paymentsTotal = 0, financeChargeTotal = 0, endingTotal = 0; 

...甚至更好 - 为他们创造一些结构。

+3

+1。作为一个经验法则,你应该几乎总是在声明它们的地方初始化局部变量。 –

+1

在声明中初始化变量是一个很好的习惯。好答案。 – JoeFish

beginningTotal += beginningBalance 

意味着同样的事情

beginningTotal = beginningTotal + beginningBalance 

beginningTotal循环之前没有初始化,那么你身边的第一时间内得到

beginningTotal = _indeterminant_value_ + beginningBalance 

所以beginningTotal始终是一个超静定值。通过不使用未初始化的变量来修复它。

double beginningTotal = 0.0;