使用结构的错误输出

Incorrect output using structures

本文关键字:错误 输出 结构      更新时间:2023-10-16

我在显示结构中的数据时遇到了一些麻烦。在用户输入所有信息后,我的程序应该以…的形式显示输入的内容。FirstName LastName TotalPay在同一行。我正在用小时工和他们的工资进行测试,假设有3名员工,显示的是最后3名员工的信息。我该如何解决这个问题,或者我做错了什么?

这是我的代码:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <cctype>
#include <sstream>
#include <set>
#include <iomanip> 
using namespace std;

//Create enumeration that contains bonus information 
enum BonusAvailability{NO_BONUS, AVG_BONUS, HIGH_BONUS};

//Create a struct that contains the employees personal information
struct PersonalInfo
{
    string fName,
           lName,
           title;
};
//Create a struct for hourly workers, calls personal info struct 
struct HourlyW
{
    PersonalInfo pData ; 
    double hoursWorked; 
    double hourlyRate;
};
//Create a struct for salary workers, calls personal info struct
struct SalaryW
{
    PersonalInfo pData;
    double salary;
    double bonus;
    BonusAvailability bData;
};

int main()
{

    int numInfo; // Holds number of employess to be entered 
    int numHour; // Holds number of hourly workers 
    int numSalary; // Holds number of salary workers
    char selection; // If user wants to continue 
    char selection2; // If user wants to continue 
    double tHour; // Total hourly 
    double tSalary; // Total salary
    HourlyW employee; // Create employee under Hourly W
    SalaryW emp; // Create emp under Salary W
    BonusAvailability b; // Create b under Bonus Availability 
                  // Get number of employees to be entered 
                  cout << "Enter the number of employees you will be entering information for: ";
                  cin >> numInfo;
                  // If number is negative, show error message  
                  while (numInfo < 0)
                   {
                       cout << "Invalid number or negative number! Try again!" << endl;
                       exit(1);
                   }
                  // Get number of hourly workers     
                  cout << "How many are hourly workers?" << endl;
                  cin >>numHour;
                  // If number is negative, show error message
                  while (numHour < 0)
                   {
                       cout << "Invalid number or negative number! Try again!" << endl;
                       exit(1);
                   }
                  // Get number of salary workers 
                  cout << "How many are salary workers?" << endl;
                  cin >> numSalary;
                  // If number is negative, show error message 
                  while (numSalary < 0)
                   {
                       cout << "Invalid number or negative number! Try again! " << endl;
                       exit(1);
                   }
                   // If sum of hourly and salary is less than or greater than the total number of employees entered show error message 
                   while ((numHour + numSalary) > numInfo || (numHour + numSalary < numInfo))
                   {
                       cout << "Hourly workers plus Salary workers does not equal " << numInfo << endl;
                       cout << "Try again " << endl;
                       cout << "" << endl;
                       cout << "How many hourly workers?" << endl;
                       cin >>numHour;
                       while (numHour < 0)
                        {
                            cout << "Invalid number or negative number!" << endl;
                            exit(1);
                        }
                        cout << "How many are salary workers?" << endl;
                        cin >> numSalary;
                        while (numSalary < 0)
                            {
                                cout << "Invalid number or negative number!" << endl;
                                exit(1);
                            }
                        if (numHour + numSalary == numInfo)
                        {
                            break;
                        }
                   }

                  // If hourly workers is greater than 0, run this to get the information
                  if (numHour > 0)
                  {
                    cout << "Hourly Workers!" << endl;
                    cout << "---------------" << endl;
                    for (int i = 0; i < numHour; i++)
                    {

                      cout << "Enter first name: ";
                      cin >> employee.pData.fName;
                      cout << "" << endl;
                      cout << "Enter last name: ";
                      cin >> employee.pData.lName;
                      cout << "" << endl;
                      cout << "Enter their title: ";
                      cin >> employee.pData.title;
                      cout << "" << endl;
                      cout << "Enter the hours worked: ";
                      cin >> employee.hoursWorked; 
                      // If hours worked is less than 0 or greater than 80, show error message 
                      while (employee.hoursWorked < 0 || employee.hoursWorked > 80)
                      {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter the hours worked: ";
                          cin >> employee.hoursWorked;
                          if (employee.hoursWorked > 0 || employee.hoursWorked < 80)
                              break;
                      }
                      cout << "" << endl;
                      cout << "Enter the hourly rate: ";
                      cin >> employee.hourlyRate;
                      cout << "" << endl;
                      tHour = employee.hoursWorked * employee.hourlyRate; // Get total hourly pay 
                      //Ask if they want to continue 
                      cout << "Would you like to continue? Y or N" << endl;
                      cin >> selection;
                      if (selection == 'y' || selection == 'Y')
                      {
                          continue;
                      }
                      else 
                      {
                          break;
                      }
                     // cout << "Total " << tHour << endl;  //TEST 

                    } 
                  }

                 // If number of salary workers is greater than 0, run this to get the information  
                 if (numSalary > 0)
                 {
                    cout << "Salary Workers!" << endl;
                    cout << "---------------" << endl;
                    for (int i = 0; i < numSalary; i++)
                    {
                        cout << "Enter first name: ";
                        cin >> emp.pData.fName;
                        cout << "" << endl;
                        cout << "Enter last name: ";
                        cin >> emp.pData.lName;
                        cout << "" << endl;
                        cout << "Enter their title: ";
                        cin >> emp.pData.title;
                        cout << "" << endl;
                        cout << "Enter salary: ";
                        cin >> emp.salary;
                        // If salary is less that 0, show error message 
                        while (emp.salary < 0)
                        {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter the salary: ";
                          cin >> emp.salary;
                          if (emp.salary > 0)
                              break;
                        }
                        cout <<"" << endl;
                        cout << "Enter bonus: ";
                        cin >> emp.bonus;
                        // If bonus is less than 0, show error message 
                        while (emp.bonus < 0)
                        {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter bonus: ";
                          cin >> emp.bonus;
                          if (emp.bonus > 0)
                          {
                            break;
                          }
                        }

                        tSalary = emp.salary + emp.bonus; // Hold total pay for salary workers 
                        cout << "Salary is " << tSalary << endl; //TEST 
                        cout << "" << endl;
                        //See if user wants to continue 
                        cout << "Would you like to continue? Y or N" << endl;
                        cin >> selection2;
                        if (selection2 == 'y' || selection2 == 'Y')
                            {
                                continue;
                            }
                        else 
                            {
                                break;
                            }
                      // See what category the salary workers fall under 
                      if (emp.bonus == 0)
                      {
                          b = static_cast<BonusAvailability> (0);
                      }
                      else if  (emp.bonus > 0 && emp.bonus <= 5000)
                      {
                          b = static_cast<BonusAvailability> (1);
                      }
                      else if (emp.bonus > 5000)
                      {
                          b = static_cast<BonusAvailability>(2);
                      }
                        cout << "" << endl;
                        cout << "Bonus is " << b << endl; //TEST 
                    }
                 }
                // Begin displaying information 
                for (int i = 0; i < numInfo; i++)
                {
                    cout << "List of employees" << endl;
                    cout << "------------------" << endl;
                    cout << employee.pData.fName << " " <<  employee.pData.lName << " "    << tHour << endl;
                }
return 0;                
}

else (emp.bonus > 5000);上有一个分号

对不起,我没听清你问题的第二部分。在他们输入时薪员工和受薪员工后,将这两个数字相加,并确保它们等于员工总数。如果没有,让他们重新输入数字。

因为你没有使用范围enum,你想在屏幕上打印它们

if (emp.bonus == 0)
{
    b = NO_BONUS;
}
else if (emp.bonus > 0 && emp.bonus <= 5000)
{
    b = AVG_BONUS;
}
else if (emp.bonus > 5000)
{
    b = HIGH_BONUS;
}
cout << "nBonus is " << b << endl;