Я не могу читать целые числа после того, как моя строка 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;
}
изменить 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;
}