Неверный вывод файла с использованием массивов - PullRequest
1 голос
/ 23 ноября 2011

Привет всем. Я только изучаю свой первый язык программирования и только что исправил одну ошибку в своем коде, чтобы оставить другую ошибку. К счастью, это последняя проблема, которую мне нужно решить, но у меня возникли небольшие проблемы, когда я сам это делаю.

Программа предназначена для считывания номера клиента и расходов, связанных с каждым номером клиента. Затем он добавит финансовую комиссию, выведет все расходы, все сложит и сохранит новый баланс каждого клиента в файл вместе с их идентификационным номером в обратном порядке.

beginbalance.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 Ответ

3 голосов
/ 23 ноября 2011

Ваше состояние не так

 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.

Таким образом, счетчик будет перебирать значения 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.
}

Надеюсь, этопомогает и удачи в учебе!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...