Help with c++ please help

I need some help to understand how to create this code. I've created a file.txt with the names and salary separated and the program is supposed to read the data from there but it doesn't, can someone help, please?


* Three employees in a company are up for a special pay increase. You are
given a file, say Ch3_Ex7Data.txt , with the following data:
Miller Andrew 65789.87 5
Green Sheila 75892.56 6
Sethi Amit 74900.50 6.1
Each input line consists of an employee’s last name, first name, current salary,
and percent pay increase. For example, in the first input line, the last name of
The employee is Miller, the first name is Andrew, the current salary is
65789.87, and the pay increase is 5% . Write a program that reads data from
the specified file and stores the output in the file Ch3_Ex7Output.dat .
For each employee, the data must be output in the following form:
firstName lastName updatedSalary . Format the output of decimal
numbers to two decimal places.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
    string lastnameA, firstnameA;
    double currentSalaryA,percentPayIncreaseA, updatedSalaryA;

    string lastnameB, firstnameB;
    double currentSalaryB,percentPayIncreaseB, updatedSalaryB;

    string lastnameC, firstnameC;
    double currentSalaryC,percentPayIncreaseC, updatedSalaryC;

    ifstream inFile;
    ofstream outFile;
    inFile.open("Ch3_Ex7Data.txt");
    outFile.open("Ch3_Ex7Output.dat");
    outFile << setprecision(2) << showpoint << fixed;

    inFile >> lastnameA >> firstnameA >> currentSalaryA >>
            percentPayIncreaseA;

    inFile >> lastnameB >> firstnameB >> currentSalaryB >>
            percentPayIncreaseB;

    inFile >> lastnameC >> firstnameC >> currentSalaryC >>
            percentPayIncreaseC;

    updatedSalaryA = currentSalaryA + (currentSalaryA * percentPayIncreaseA / 100);
    updatedSalaryB = currentSalaryB + (currentSalaryB * percentPayIncreaseB / 100);
    updatedSalaryC = currentSalaryC + (currentSalaryC * percentPayIncreaseC / 100);

    outFile << lastnameA << " " << firstnameA << " " << updatedSalaryA <<endl;
    outFile << lastnameB << " " << firstnameB << " " << updatedSalaryB <<endl;
    outFile << lastnameC << " " << firstnameC << " " << updatedSalaryC <<endl;

    inFile.close();
    outFile.close();
    return 0;
}
Hello jsbd29,

I do not see what your problem is. The code, although redundant, works.

Add this code after you open the input file to make sure the file is open. I would guess that the input file did not open, file could be in the wrong directory, and since your variables are uninitialized you are just outputting garbage. Your input file usually is in the directory that the ".cpp" file(s) are in.

1
2
3
4
5
6
7
8
9
10
11
if (inFile.is_open())
{
	std::cout << "\n File " << "Ch3_Ex7Data.txt" << " is open" << std::endl;
	std::this_thread::sleep_for(std::chrono::seconds(2));  // <--- Needs header files chrono" and "thread".
}
else
{
	std::cout << "\n File " << "Ch3_Ex7Data.txt" << " did not open" << std::endl;
	std::this_thread::sleep_for(std::chrono::seconds(3));  // <--- Needs header files chrono" and "thread".
	exit(1);
}


When you open the output file I find this works best when first starting the program

outFile.open("Ch3_Ex7Output.dat", std::ios::trunc | std::ios::ate);

Then I would cut down all the variables to just one set. Lines 25 - 40 I would put in a while loop to read the file. This is all you really need

1
2
3
4
5
6
7
8
while (inFile >> lastname)
{
	inFile >> firstname >> currentSalary >> percentPayIncrease;

	updatedSalary = currentSalary + (currentSalary * percentPayIncrease / 100);
		
	outFile << lastname << " " << firstname << " " << updatedSalary << std::endl;
}


This way it does not matter how any lines are in the input file. It just keeps reading until it reaches end of file.

Hope that helps,

Andy
yeah :) thank you, Andy
Topic archived. No new replies allowed.