使用结构来保存用户C ++输入的信息

时间:2018-03-22 15:13:45

标签: c++ struct

好的,所以我正在编写一个C ++程序来声明一个结构数据类型,该类型包含员工的以下信息(名字,姓氏,ID,工资率和小时)。我的问题是用户只能输入ID和名字,然后整个程序运行而不让用户输入其余的数据。

继承我的代码:

 #include <iostream> 
 #include <iomanip> 


    using namespace std;

    struct Employee
{

int employeeID;
char firstName;
char lastName;
float payRate;
int hours;

};



int main()
{
    int i, j;

    cout << "How Many Employees Do You Wish To Enter?:\n\n";
    cin >> j;

   Employee info;

   for (i = 0; i < j; i++)
   {
        cout << "Enter in the Data for Employee number " << i + 1 << endl;

        cout << setw(5) << "\n Please Enter The Employee ID Number: ";
        cin >> info.employeeID;

        cout << setw(5) << "\n Please Enter Employees First Name: ";
        cin >> info.firstName;

        cout << setw(5) << "\n Please Enter Employees Last Name: ";
        cin >> info.lastName;

        cout << setw(5) << "\n Please Enter Employees Pay Rate: ";
        cin >> info.payRate;

        cout << setw(5) << "\n  Please Enter The Hours The Employee Worked: 
";
        cin >> info.hours;


    }

    cout << "\n\n                                   \n";

    cout << "ID" << setw(15) << "First Name" << setw(10) << "Last Name" << 
setw(10) << "Pay Rate" << setw(10) << "Hours";
    cout << endl;

    for (i = 0; i < j; i++)
    {

    cout << "\n" << info.employeeID << setw(15) << info.firstName << setw(10) << info.lastName << setw(10) << info.payRate << setw(10) << info.hours;

}

cout << "\n\n                                    \n";



system("pause");
return 0;



};

2 个答案:

答案 0 :(得分:0)

首先,请阅读Tips and tricks for using C++ I/O (input/output)。理解C ++ I / O可能会有所帮助。

以下是对您的代码的一些评论:

<强>第一

使用string代替char

struct Employee
{
    int employeeID;
    string firstName;
    string lastName;
    float payRate;
    int hours;
};

<强>第二

使用Employee对象数组来存储多个员工。

Employee info[100]; 

<强>第三

谨慎使用cin数据类型。在你的情况下,它将是这样的:

cout << "Enter in the Data for Employee number " << i + 1 << endl;
cout << setw(5) << "\n Please Enter The Employee ID Number: ";
cin >>  info[i].employeeID;
cin.ignore(); //It is placed to ignore new line character.
cout << setw(5) << "\n Please Enter Employees First Name: ";
getline (cin,  info[i].firstName);
cout << setw(5) << "\n Please Enter Employees Last Name: ";
getline (cin,  info[i].lastName);
cout << setw(5) << "\n Please Enter Employees Pay Rate: ";
cin >>  info[i].payRate;
cout << setw(5) << "\n  Please Enter The Hours The Employee Worked: ";
cin >>  info[i].hours;

<强>四

std::getline()之前使用时,

std::cin >> var会遇到问题。因此,在这种情况下可以使用std::cin.ignore()来解决问题。

我希望它有所帮助。

答案 1 :(得分:0)

#include <iostream> 
#include <iomanip> 
#include <string> //Allows you to use strings, which are way more handy for text manipulation
#include <vector> //Allows you to use vector which are meant to be rezied dynamicaly, which is your case


using namespace std;

struct Employee
{

    int employeeID;
    string firstName; //HERE : use string instead of char (string are array of char)
    string lastName; //HERE : use string instead of char
    float payRate;
    int hours;

};



int main()
{
    int j; 

    cout << "How Many Employees Do You Wish To Enter?:\n\n";
    cin >> j;

    vector<struct Employee> info; //creation of the vector (dynamic array) to store the employee info the user is going to give you

    for (int i = 0; i < j; i++) //declare your looping iterator "i" here, you will avoid many error 
    {
        struct Employee employee_i; // create an employee at each iteration to associate the current info
        cout << "Enter in the Data for Employee number " << i + 1 << endl;

        cout << "\n Please Enter The Employee ID Number: ";
        cin >> employee_i.employeeID; 

        cout <<  "\n Please Enter Employees First Name: ";
        cin >> employee_i.firstName;

        cout << "\n Please Enter Employees Last Name: ";
        cin >> employee_i.lastName;

        cout << "\n Please Enter Employees Pay Rate: ";
        cin >> employee_i.payRate;

        cout << "\n  Please Enter The Hours The Employee Worked: ";
        cin >> employee_i.hours;

        info.push_back(employee_i); //store that employee info into your vector. Push_back() methods expands the vector size by 1 each time, to be able to put your item in it
    } // because you employee variable was create IN the loop, he will be destruct here, but not the vector which was created outside

    cout << "\n\n                                   \n";

    for (int i = 0; i < j; i++) //the loop to get back all the info from the vector
    {
        cout << "ID :" << info[i].employeeID << "  First Name :" << info[i].firstName << "  Last Name :" <<
            info[i].lastName << "  Pay Rate :" << info[i].payRate << "  Hours :"<< info[i].hours;
        cout << endl;
//notice the info[i], which leads you to the employee you need and the ".hours" which leads to the hours info of that specific employee
        }

        system("pause");
        return 0;
}