我如何从文本文件中获取值,然后用它们执行一些计算(例如,乘以并显示它们)?

时间:2019-07-10 09:49:11

标签: c++

我有一个文本文件,其中包含一些数据,如下所示

Employee No.    Name        Rate per hour       Hours worked
100             Rishi         800                   40
101             Albert        700                   35
102             Richard       500                   30
103             Roni          600                   45
104             Reena         900                   40 

我需要显示雇员编号,姓名和薪水 现在我设法按原样显示表格 我知道要计算薪水,我需要将比率和工作时间相乘 但是我的老师告诉我们要自己做

我只设法按原样显示它在文本文件中

#include <iostream>
#include<fstream>

using namespace std;


int main(int argc, char** argv) 
{
    char ch;


    ifstream inFile;
    inFile.open("C:\\Users\\dolej\\OneDrive\\Desktop\\assignment.txt");

    if (!inFile) 
    {
        cout << "Unable to open file";

    }

    while (!inFile.eof())
    {
        inFile >> noskipws >> ch;   //reading from file
        cout << ch;
    }

    inFile.close();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

针对您的问题,大约有4200万种解决方案:-)

让我解释一下代码的哪些部分需要改进。基本问题是您逐字符读取输入的内容。您应该利用std::istream的能力来读取所需的任何变量类型,并且该变量类型存在插入器operator >>。对于几乎所有的内置类型,都存在这样的运算符。因此,如果您想阅读int,则可以通过int i{0}; std::cin >> i进行。与其他类型的变量相同。

请阅读有关iostream库的书。

然后还有其他改进。始终初始化所有变量。使用统一的初始化程序{}。初始化std::ifstream可以自动打开文件。它将被析构函数自动关闭。请勿使用while (!inFile.eof())。请改用while(infile >> something)

然后,正如我所说,读取整个变量,而不仅仅是读取一个字符。

简单解决方案示例:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <iomanip>

int main()
{
    std::ifstream infile{ "r:\\assignment.txt" };
    if (infile)
    {
        // Read the header line
        std::string header{};
        std::getline(infile, header);

        // Now we want to read all data in the text file
        // Define variables, where we will store the data
        int employeeNumber{ 0 };
        std::string name{};
        int ratePerHour{ 0 };
        int hoursWorked{ 0 };

        // Print the header
        std::cout << header << '\n';
        // Read all lines in a loop
        while (infile >> employeeNumber >> name >> ratePerHour >> hoursWorked)
        {
            // calculate the result
            const int salary{ ratePerHour * hoursWorked };
            // Print table
            std::cout << std::left << std::setw(16) << employeeNumber << std::setw(16) << name <<
                std::setw(16) << ratePerHour << std::setw(16) << hoursWorked <<
                "    Salary --> " << salary << '\n';
        }
    }
    return 0;
}

然后,由于您是C ++的programmin。使用对象。对象将相关的事物组合在一起,并定义对数据进行操作的方法。因此,您可以定义一个类,并使用该类创建新的数据类型。并且由于该用户特定类型不存在插入器和提取器运算符,因此需要创建它们。

在您的主机中,您可以在simpel语句中读取完整的文件。然后计算结果并打印。

请参阅:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <iomanip>

class Payroll
{
public:
    Payroll() {}

    void calculate() { salary = ratePerHour * hoursWorked; }

    friend std::istream& operator >> (std::istream& is, Payroll& p) {
        return is >> p.employeeNumber >> p.name >> p.ratePerHour >> p.hoursWorked;
    }
    friend std::ostream& operator << (std::ostream& os, const Payroll& p) {
        return os << std::left << std::setw(16) << p.employeeNumber << std::setw(16) << p.name <<
            std::setw(16) << p.ratePerHour << std::setw(16) << p.hoursWorked << std::setw(16) << p.salary;
    }

private:
    int employeeNumber{ 0 };
    std::string name{};
    int ratePerHour{ 0 };
    int hoursWorked{ 0 };
    int salary{ 0 };
};

int main()
{
    // Define variable and automatically open it.
    // Will be closed by destructor, when infile goes out of scope
    std::ifstream infile{ "r:\\assignment.txt" };

    // If the file is open ( !operator of ifstream is overlaoded )
    if (infile)
    {
        // Read the header line
        std::string header{};
        std::getline(infile, header);

        // Define a vector of Payroll. Use range the constructor of the vector to read all data from file
        std::vector<Payroll> payroll{ std::istream_iterator<Payroll>(infile), std::istream_iterator<Payroll>() };

        // For each payroll element in the vector of payrolls: Calculate the salary
        std::for_each(payroll.begin(), payroll.end(), [](Payroll & p) {p.calculate(); });

        // Output Result:
        std::cout << header << "    " << "Salary\n";
        std::copy(payroll.begin(), payroll.end(), std::ostream_iterator<Payroll>(std::cout, "\n"));
    }
    return 0;
}

花点时间尝试逐行理解。 。