Я чувствую, что входной код, который я вставил в свою структуру, может быть сжат, какие-либо предложения о том, как сохранить индивидуальность данных при коротком коде? - PullRequest
0 голосов
/ 08 сентября 2018

Я пытался выяснить, как вводить информацию в мою структуру, но я хотел бы сжать код.

#include <iostream>
using namespace std;

struct Employee //The whole program is going to revolve around this struct
{
    char first[10], last[10];
    float Hours_Worked, Hourly_Rate, Fed_Tax_Rate, St_Tax_Rate;
}Kobe, Lebron, Larry, Michael; //Struct declarations

Код прямо здесь - тот, о котором я говорю. Я предпочел использовать цикл for, который повторяется 4 раза, однако мне нужна индивидуальная информация.

int main()
{
    Employee Kobe;
    cout << "First name: ";
    cin >> Kobe.first;
    cout << "Last name: ";
    cin >> Kobe.last;
    cout << "Hours worked: ";
    cin >> Kobe.Hours_Worked;
    cout << "Federal Tax Rate: ";
    cin >> Kobe.Fed_Tax_Rate;
    cout << "State Tax Rate: ";
    cin >> Kobe.St_Tax_Rate;

    Employee Lebron;
    cout << "First name: ";
    cin >> Lebron.first;
    cout << "Last name: ";
    cin >> Lebron.last;
    cout << "Hours worked: ";
    cin >> Lebron.Hours_Worked;
    cout << "Federal Tax Rate: ";
    cin >> Lebron.Fed_Tax_Rate;
    cout << "State Tax Rate: ";
    cin >> Lebron.St_Tax_Rate;

    Employee Larry;
    cout << "First name: ";
    cin >> Larry.first;
    cout << "Last name: ";
    cin >> Larry.last;
    cout << "Hours worked: ";
    cin >> Larry.Hours_Worked;
    cout << "Federal Tax Rate: ";
    cin >> Larry.Fed_Tax_Rate;
    cout << "State Tax Rate: ";
    cin >> Larry.St_Tax_Rate;

    Employee Michael;
    cout << "First name: ";
    cin >> Michael.first;
    cout << "Last name: ";
    cin >> Michael.last;
    cout << "Hours worked: ";
    cin >> Michael.Hours_Worked;
    cout << "Federal Tax Rate: ";
    cin >> Michael.Fed_Tax_Rate;
    cout << "State Tax Rate: ";
    cin >> Michael.St_Tax_Rate;


return 0;
}

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Используйте массив Employee s и for -loop, чтобы избежать написания дублирующего кода:

#include <iostream>

using namespace std;

struct Employee
{
    char first[10];
    char last[10];
    float Hours_Worked;
    float Hourly_Rate;
    float Fed_Tax_Rate;
    float St_Tax_Rate;
};

int main()
{
    Employee employees[4];

    for (auto &e : employees) {
        cout << "First name: ";
        cin >> e.first;
        cout << "Last name: ";
        cin >> e.last;
        cout << "Hours worked: ";
        cin >> e.Hours_Worked;
        cout << "Hourly rate: ";
        cin >> e.Hourly_Rate;
        cout << "Federal Tax Rate: ";
        cin >> e.Fed_Tax_Rate;
        cout << "State Tax Rate: ";
        cin >> e.St_Tax_Rate;
    }

    for (auto const &e : employees)
        cout << e.first << ' ' << e.last << '\n' << e.Hours_Worked << " / "
             << e.Hourly_Rate << " / " << e.Fed_Tax_Rate << " / " << e.St_Tax_Rate << "\n\n";
}

Если вы (пока) не знакомы с for -циклами на основе диапазона, вы, конечно, можете использовать традиционные циклы, такие как

for(size_t i{}; i < sizeof(employees)/sizeof(*employees); ++i)
    // and access eployees[i] in the loops body.
0 голосов
/ 08 сентября 2018

Определите Employee с помощью метода ввода для получения ввода

struct Employee 
{
    char first[10], last[10];
    float Hours_Worked, Hourly_Rate, Fed_Tax_Rate, St_Tax_Rate;

    bool getinput(std::istream & in, 
                  std::ostream & out);
};

Затем вы реализуете этот метод

bool Employee::getinput(std::istream & in, 
                        std::ostream & out);
{
    out << "First name: ";
    in >> first;
    out << "Last name: ";
    in >> last;
    out << "Hours worked: ";
    in >> Hours_Worked;
    out << "Federal Tax Rate: ";
    in >> Fed_Tax_Rate;
    out << "State Tax Rate: ";
    in >> St_Tax_Rate;

    return in.good(); //always good to know if the input succeeded

}

, а затем вызываете метод

Employee Kobe;
Kobe.getinput(cin, cout);
Employee Lebron;
Lebron.getinput(cin, cout);
Employee Larry;
Larry.getinput(cin, cout);
Employee Michael;
Michael.getinput(cin, cout);

cin и cout передаются в абстрактной форме, чтобы вы могли вызывать getinput в разных входных потоках, например, в сетевой сокет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...