使用数组的文件输出不正确

时间:2011-11-22 22:04:48

标签: c++ arrays file-io

大家好我只是在学习我的第一个编程语言,并且刚刚在我的代码中纠正了一个错误,只留下了另一个错误。值得庆幸的是,这是我需要解决的最后一个问题,但我自己也有点麻烦。

该程序将读入与每个客户编号相关的客户编号和费用。然后它将添加财务费用,输出所有费用,总计所有内容,并以相反的顺序将每个客户的新余额与其ID号一起保存到文件中。

beginningbalance.dat看起来像

111
200.00
300.00
50.00
222
300.00
200.00
100.00

和newbalances.dat应该看起来像

222
402.00
111
251.00

除了取决于文件写入循环中“count--”的放置位置,我最终得到了

222
402.00
111
251.00
-858993460
-92559631349317830000000000000000000000000000000000000000000000.00

我无法弄清楚我应该做些什么来摆脱这些额外的价值观。有什么建议吗?

这是我的代码

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



int main()
{
  int count = 0;
  const int size = 100;
  double customer_beg_balance, customer_purchases, customer_payments, finance_charge_cost, finance_charge = .01;
  int customer_number[size];
  double new_balance[size];
  double total_beg_balances=0,total_finance_charges=0,total_purchases=0,total_payments=0,total_end_balances=0;


  ifstream beginning_balance;
  beginning_balance.open("beginningbalance.dat");

  while(beginning_balance>>customer_number[count])
    {
        beginning_balance >> customer_beg_balance;
        beginning_balance >> customer_purchases;
        beginning_balance >> customer_payments;

        finance_charge_cost = customer_beg_balance * finance_charge;

        new_balance[count] = customer_beg_balance + finance_charge_cost + customer_purchases - customer_payments; 
        total_beg_balances+=customer_beg_balance;
        total_finance_charges+=finance_charge_cost;
        total_purchases+=customer_purchases;
        total_payments+=customer_payments;
        total_end_balances+=new_balance[count];

        cout<<fixed<<setprecision(2)<<setw(8)<<"Cust No  "<<"Beg. Bal.  "<<"Finance Charge  "<<"Purchases  "<<"Payments  "<<"Ending Bal.\n"
            <<customer_number[count]<<"        "<<customer_beg_balance<<"        "<<finance_charge_cost<<"       "<<customer_purchases<<"     "<<customer_payments<<"         "<<new_balance[count]<<endl;


        count++;                            
    }

  cout<<"\nTotals     "<<total_beg_balances<<"        "<<total_finance_charges<<"       "<<total_purchases<<"     "<<total_payments<<"         "<<total_end_balances<<endl;

  ofstream new_balance_file;
  new_balance_file.open("NewBalance.dat");

  while(count >= 0)
  {
    count--;
    new_balance_file <<customer_number[count]<<endl;
    new_balance_file<< fixed<<setprecision(2)<<new_balance[count]<<endl;

  }


  new_balance_file.close();


system("pause");
        return 0;
 }

1 个答案:

答案 0 :(得分:3)

你的病情错了

 while(count >= 0)
 {
    count--;
    new_balance_file <<customer_number[count]<<endl;
    new_balance_file<< fixed<<setprecision(2)<<new_balance[count]<<endl;

 }

应该是count > 0而不是count >= 0

这种方式count将遍历值n, n-1, ... 1并且因为你在while语句的开头递减它,你在循环中操作的值将是n-1, n-2.... 0,正好是什么你需要。

顺便说一句,如果你的课程已经涵盖了for循环并且你被允许使用它,那么它更合适,就像这样

for(int i = count - 1; i >= 0; --i)
{
    use i instead of count here.
}

希望这对你的学习有所帮助并祝你好运!