家庭作业分配infile / outfiles

时间:2016-03-13 17:38:48

标签: c++ file-io

我的作业陈述如下:

  

一家公司的三名员工正在加薪。您将获得一个文件Ch3_Ex7Data.txt,其中包含以下数据:

     

Miller Andrew 65789.87 5
  Green Sheila 75892.56 6
  Sethi Amit 74900.50 6.1

     

每个输入行包含员工的姓氏,名字,当前薪水和工资增长百分比。

例如,在第一个输入行中,员工的姓氏为Miller,第一个名称为Andrew,当前工资为65789.87,工资增长为5 %

  

编写一个程序,从指定文件中读取数据并将输出存储在文件Ch3_Ex7Output.dat中。对于每个员工,必须以下列形式输出数据:
firstName lastName updatedSalary
将十进制数的输出格式化为两位小数。

我的代码如下。

#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;
}

出于某种原因,我似乎无法获取代码来打开我现有的.txt文件,阅读它然后将其翻译成另一个文件。有没有人认为这有什么问题可以帮助我?

2 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。

最明显的两个阻止程序编译:

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

应该是:

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

while (!inFile.eof() //loop至少应为while (!inFile.eof() )//loop

那不是全部:

while (!inFile.eof())是一个反成语:你测试文件结尾,然后读并进行处理,即使发生了错误或文件结束。您必须在>之后测试

正如您在评论中所说的那样,{ }只有while重复pay = pay*(1 + payIncrease/100.);之后的第一行,这是你想要的。

添加百分比增长的正确公式是pay = pay+(pay*payIncrease/100.);至少'/n'

添加'\n'作为行尾是完全错误的。该字符为endl(请注意后退斜杠),无论如何,您应始终在C ++中编写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; }

完成所有修复后,循环变为:

Andrew Miller 69079.36
Sheila Green 80446.11
Amit Sethi 79469.43

,输出为:

rspec_options = {
  cmd: "bundle exec rspec",
  run_all: {
    cmd: "bundle exec parallel_rspec -o '",
    cmd_additional_args: "'"
  }
}
guard :rspec, rspec_options do
# (...)

但是你想要学习好的实践,你也应该:

  • 测试两个文件的打开
  • 如果终止是由错误引起并发出警告
  • ,则在循环结束后进行测试
  • 最后通过学习使用调试器...

答案 1 :(得分:0)

这是我的解决方法

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

int main() {
    // Write your main here
    //Declarations
    string FirstName;
    string LastName;
    double Pay;
    double Increase;
    double UpdatedSalery;

    //File object and open txt and dat files per instructions and use user input for    the txt input file
    ifstream FileIn;
    string FileName;
    cout << "enter a file name: ";
    cin >> FileName;
    FileIn.open(FileName);

    ofstream FileOut("Ch3_Ex5Output.dat");
    FileOut << setprecision(8);

    while(FileIn >> LastName >> FirstName >> Pay >> Increase){
        UpdatedSalery = ((Pay*(Increase/100))+Pay);
        FileOut << " " << FirstName << " " << LastName << " " << UpdatedSalery << endl;
    }
    FileIn.close();
    FileOut.close();
    return 0;
}