Cant, кажется, заставляет мои ifstream и ofstream работать правильно, когда используются функции getline () и Ignore (). Cant Use Loops или Arrays ect

0

Я не могу читать целые числа после того, как моя строка getline() читается в строке. Мне нужно прочитать все имя из файла данных, затем прочитать в ставке оплаты, затем количество иждивенцев, а затем процент брутто. Я могу использовать векторы Loop Arrays или что-то в этом роде. Я могу использовать только функции getline() и Ignore() или что-то подобное этому. Итак, мой вопрос в том, где я ошибаюсь?

Вот как выглядит файл данных (я только кодировал его для чтения в одном лице):

Джон У. Смит

12,55

3

5

Мэри Андерсон

11,75

1

8

Брэд У. Бейкер

11,75

0

0

Хизер Джонсон

13,25

2

10

Вот мой код:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;


int main()
{
    ifstream indata;
    ofstream outdata;
    string fname, lname;
    int hours;
    hours = 0;
    outdata.open("Weeklypay.dat");
    double payrate;
    double gross;
    double taxes;
    double ssecurity;
    int dependants;
    double retirement;
    double net;
    double percgross;
    int insurance;

    indata.open("Pay.dat");
    getline(indata, fname);

    cout << "Please enter the total hours worked for " << fname << endl;
    cin >> hours;
    indata >> payrate >> insurance;
    gross = payrate * hours;
    taxes = 0.23 * gross;
    ssecurity = 0.08 * gross;
    dependants = 12 * insurance;
    indata >> percgross;
    retirement = percgross * gross / 100;
    net = gross - taxes - ssecurity - dependants - retirement;

    cout << fname << " net pay is: $" << net << endl;
    outdata << fname << endl;
    outdata << "Gross Pay: $" << gross << endl;
    outdata << "Taxes: $" << taxes << endl;
    outdata << "Social Security: $" << ssecurity << endl;
    outdata << "Insurance: $" << dependants << endl;
    outdata << "Retirement: $" << retirement << endl;
    outdata << endl << endl;
    outdata << "Net Pay: $" << net << endl;
    outdata << endl << endl;

    // Next person here:

    cin.ignore(10, '\n');
    getline(indata, fname);

    cout << "Please enter the total hours worked for " << fname << lname << endl;
    cin >> hours;

    indata >> payrate;
    gross = payrate * hours;
    taxes = 0.23 * gross;
    ssecurity = 0.08 * gross;
    indata >> insurance;
    dependants = 12 * insurance;
    indata >> percgross;
    retirement =  percgross * gross / 100;
    net = gross - taxes - ssecurity - dependants - retirement;

    cout << fname << lname << " net pay is: $" << net << endl;
    outdata << fname << lname << endl;
    outdata << "Gross Pay: $" << gross << endl;
    outdata << "Taxes: $" << taxes << endl;
    outdata << "Social Security: $" << ssecurity << endl;
    outdata << "Insurance: $" << dependants << endl;
    outdata << "Retirement: $" << retirement << endl;
    outdata << endl << endl;
    outdata << "Net Pay: $" << net << endl;
    outdata << endl << endl;

     indata.close();
     outdata.close();

     return 0;
}
  • 0
    Что вы имеете в виду "где я иду не так"? Что не так?
  • 0
    Хорошо, это не чтение в ставке заработной платы или количество иждивенцев, или процент брутто из файла данных. Это только читает во всем имени Джона У. Смита. Я заканчиваю странным расчетом.
Показать ещё 1 комментарий
Теги:
visual-studio-2010

1 ответ

0
Лучший ответ

изменить retirement = percgross * gross; к retirement = percgross * gross/100; Вы читаете процентное соотношение брутто и умножаете его напрямую, тогда retirement на retirement больше, чем gross.
РЕДАКТИРОВАТЬ:
для сценария множественных лиц используйте оператор цикла.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;


int main()
{
    ifstream indata;
    ofstream outdata;
    string fname, lname;
    int hours;
    hours = 0;
    outdata.open("Weeklypay.dat");
    double payrate;
    double gross;
    double taxes;
    double ssecurity;
    int dependants;
    double retirement;
    double net;
    double percgross;
    int insurance;

    indata.open("Pay.dat");

    while(getline(indata, fname) )
    {
        if(fname.empty() )
            continue;
        cout << "Please enter the total hours worked for " << fname << endl;
        cin >> hours;
        indata >> payrate >> insurance;
        gross = payrate * hours; //690.25
        taxes = 0.23 * gross;//158.75
        ssecurity = 0.08 * gross;//51.7
        dependants = 12 * insurance;//3
        indata >> percgross;
        retirement = percgross * gross / 100;//34.51
        net = gross - taxes - ssecurity - dependants - retirement;

        cout << fname << " net pay is: $" << net << endl;
        outdata << fname << endl;
        outdata << "Gross Pay: $" << gross << endl;
        outdata << "Taxes: $" << taxes << endl;
        outdata << "Social Security: $" << ssecurity << endl;
        outdata << "Insurance: $" << dependants << endl;
        outdata << "Retirement: $" << retirement << endl;
        outdata << endl << endl;
        outdata << "Net Pay: $" << net << endl;
        outdata << endl << endl;

    }

    indata.close();
    outdata.close();

    return 0;
}
  • 0
    Спасибо! это помогло с вычислением, но теперь, когда я добавляю другого человека с той же копией кода и вставляю под ним. Он не будет читать следующее имя и цифры в файле. Я отправил код сейчас
  • 0
    о, вам просто нужен цикл, чтобы решить вашу проблему. Не используйте копирование и вставку программирования, смотрите редактирование.
Показать ещё 9 комментариев

Ещё вопросы

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