Homework Assignment infile / outfiles

My assignment states the following :

Three employees in a company are up for a special pay increase. You are given a file, 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.

My code is the following.

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    //Declaring the variables
    string firstName;
    string lastName;
    double payIncrease;
    double pay;
    ifstream inFile;
    ofstream outFile;

    inFile.open("C:\\Users\\Megan\\Ch3_Ex7Data.txt"); //opens the input file
    outFile.open("C:\\Users\\Megan\\Ch3_Ex7Output.dat"); //opens a output file

    outFile << fixed << showpoint;
    outFile << setprecision(2); // Output file only having two decimal places
    cout << "Processing Data....." endl;  //program message

    while (!inFile.eof() //loop
        inFile >> lastName >> firstName >> pay >> payIncrease;
        pay = pay*(pay*payIncrease);
        outFile << firstName << " " << lastName << " " << pay << "/n";

    inFile.close();
    outFile.close();

    return 0;
}

For some reason I cannot seem to get the code to open my existing .txt file, read it and then translate it to another file. Does anybody see anything wrong with this that could help me out?

Answers


You have many problems with you code.

The two most evident prevent the program from compiling:

cout << "Processing Data....." endl;  //program message

should be:

cout << "Processing Data....." << endl;  //program message

and while (!inFile.eof() //loop should be at least while (!inFile.eof() )//loop

That's not all:

while (!inFile.eof()) is an anti-idiom: you test for end of file, then read and do the processing even if an error or end of file has occured. You must test after reading.

And as you were said in comment, without { } only the first line after the while is repeated, which is not what you want.

The correct formula to add a percent increase is pay = pay*(1 + payIncrease/100.); at least pay = pay+(pay*payIncrease/100.);

Adding a '/n' as an end of line is plain wrong. The character is '\n' (note the backslash), and anyway you should always write endl in C++.

Once all that is fixed, the loop becomes:

for (;;) { //loop
    inFile >> lastName >> firstName >> pay >> payIncrease;
    if (! inFile) break; // exit on eof or error
    pay = pay*(1 + payIncrease/100.);
    outFile << firstName << " " << lastName << " " << pay << endl;
}

and the output is:

Andrew Miller 69079.36
Sheila Green 80446.11
Amit Sethi 79469.43

But is you want to learn good pratices, you should also:

  • test the opening of both files
  • test after end of loop if the termination was caused by an error and issue a warning
  • last by not least learn to use a debugger...

Need Your Help

Can I launch an Android app from incoming SMS/MMS messages?

android sms mms self-extracting

I would like to know if I can launch a program via incoming MMS/SMS? More on the MMS side of things.