Столбцы в фстриме с чтением данных ноль! (Массив объектов заработной платы) C ++

0

Я искал поиск в Google, как сумасшедший, и старался изо всех сил, но имел некоторые проблемы. В основном для домашней работы мы должны создать массив объектов расчета заработной платы, используя общий формат, который я сделал ниже...

У меня проблемы. Файл.dat, который мы тестируем, выглядит следующим образом:

40.0     10.00
38.5      9.50
16.0      7.50
42.5      8.25
22.5      9.50
40.0      8.00
38.0      8.00
40.0      9.00
44.0     11.75

Когда я запускаю программу, она показывает первый столбец объектов, но всегда будет заменять значения второго столбца на 0. Любые идеи?

(TL; DR.... В настоящее время он читает "Сотрудник № 1: 40, 0", а не "Сотрудник № 1: 40, 10,00"... и т.д.)

Здесь мой код.... (а не 100% сделано, а просто тестирование datafile atm)

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

class Payroll
{
    private:
        double payRate;     // holds an employee hourly pay rate
        double hoursWorked;  // an employee hours worked

    public:
        Payroll()  // empty constructor sets the payRate and hoursWorked to zero
        {   payRate = 0;
            hoursWorked = 0;
        }
        Payroll(double payR, double hoursW) //constructor checks for payR and hoursW to be positive& sets to values
        {   if (payR < 0)
                payRate = 0;
            else 
                payRate = payR;

            if (hoursW < 0)
                hoursW = 0;
            else
                hoursW = hoursWorked;
        }
        void setPayRate(double payR) //mutator for payRate; checks for payR to be positive or sets to zero
        {   if (payR < 0)
                payRate = 0;
            else payRate = payR;
        }
        void setHoursWorked(double hoursW) //mutator for hoursWorked; checks for positive hoursW or sets to zero
        {
            if (hoursW < 0)
                hoursW = 0;
            else
                hoursW = hoursWorked;
        }
        double getPayRate() //accessor to return payRate
        {   return payRate; }

        double getHoursWorked() // accessor to return hoursWorked
        {   return hoursWorked; }

        double getGrossPay() // computes and returns gross pay including OVERTIME, if any
        {   if (hoursWorked > 8)
                return ((payRate * 1.5) * hoursWorked);
            else 
                return (payRate * hoursWorked);
        }
};

int main()
{
    const int EMPLOYEES = 7;
    double payRate, hoursWorked;

    ifstream datafile;
    datafile.open("payroll.dat");

    Payroll payArray[EMPLOYEES];

    if (!datafile)
        cout << "AHH!! Error opening this file!! SRY!!!" << endl;
    else
    {   for (int index = 0; index < EMPLOYEES; index++)
        {   
            datafile >> payRate >> hoursWorked; 
            payArray[index].setPayRate(payRate);
            payArray[index].setHoursWorked(hoursWorked);
            cout << "Employee #" << index + 1 << ": ";
            cout <<  payArray[index].getPayRate() << ", " << payArray[index].getHoursWorked() << endl;

        }   
    }

}

В настоящее время выйдет

Employee #1: 40, 0
Employee #2: 38.5, 0
Employee #3: 16.0, 0
...
Employee #7: 38, 0

Я хочу, чтобы он прочитал другую колонку, не давая мне нуля :( Спасибо, я сейчас лягу спать.

Теги:
object
arrays
zero
fstream

1 ответ

0

Операторы присваивания в setHoursWorked ошибочны; они должны назначать переменную экземпляра hoursWorked, а не параметр hoursW.

  • 0
    О боже, я не могу поверить, что я упустил это из виду ... В настоящее время хлопаю себя ... Спасибо за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню