为什么我有一个"="符号输出和 2 个笑脸而不是正确的输出?C++



这是显示chages的更新,详细信息如下。 这是输出快照的链接 https://dl.dropboxusercontent.com/u/34875891/wrongoutput.PNG

#include <iostream>
    #include <iomanip>
    #include <string>
    #include <cstring>
    using namespace std;
    //create HotelRoom class
    class HotelRoom
    {
    private:
        char* ptr_guest;
        char room_number[3];
        int room_capacity;
        int occupancy_status;
        double daily_rate;
    public:
        HotelRoom(char roomNumber[], int roomCapacity, double roomRate, char* ptr_name, int occupancyStatus);
        ~HotelRoom();
        void Display_Number();
        void Display_Guest();
        int Get_Capacity();
        int Get_Status();
        double Get_Rate();
        int Change_Status(int);
        double Change_Rate(double);
    };
    HotelRoom::HotelRoom(char roomNumber[], int roomCapacity, double roomRate, char* ptr_name, int occupancyStatus)
    {
        strcpy(room_number, roomNumber);
        room_capacity = roomCapacity;
        daily_rate = roomRate;
        ptr_guest = new char[strlen(ptr_name) + 1];
        strcpy(ptr_guest, ptr_name);
        occupancy_status = occupancyStatus;
    }
    HotelRoom::~HotelRoom()
    {
        cout << endl;
        cout << "Destructor Executed";
        cout << endl;
        delete [] ptr_guest;
    }
    void HotelRoom::Display_Guest()
    {
        char* temp = ptr_guest;
        while(*temp != '')
            cout << *temp++;
    }
    void HotelRoom::Display_Number()
    {
        cout << room_number;
    }
    int HotelRoom::Get_Capacity()
    {
        return room_capacity;
    }
    int HotelRoom::Get_Status()
    {
        return occupancy_status;
    }
    double HotelRoom::Get_Rate()
    {
        return daily_rate;
    }
    int HotelRoom::Change_Status(int roomStatus)
    {
        if(roomStatus <= room_capacity )
        {
            occupancy_status = roomStatus;
            return occupancy_status;
        }
        else
            occupancy_status = -1;

    }
    double HotelRoom::Change_Rate(double newRate)
    {
        daily_rate = newRate;
        return daily_rate;
    }
    int main()
    {
        cout << setprecision(2)
             << setiosflags(ios::fixed)
             << setiosflags(ios::showpoint);
        //Declare variables to hold data
             char roomNumber[3] = {'1','3',''};
             char guestName[20];
             double roomRate = 89.00;
             int roomCapacity = 4;
             int occupancyStatus = 0;
             int status;
             int checkOut;
             int newCustomer;
        //Ask for user input
             cout << "What is the guest's name: ";
             cin.getline(guestName, 20);
             cout << endl;
             cout << "How many guests will be staying in the room: ";
             cin >> status;
             HotelRoom HotelRoom1(roomNumber, roomCapacity, roomRate, guestName, status);
        //Display Rooom information
             cout << endl;
             cout << endl;
             if(HotelRoom1.Change_Status(status))
             {
                 cout << endl;
                cout << "Guest's Name: ";
                HotelRoom1.Display_Guest();
                cout << endl;
                cout << endl;
                cout << "The capacity of this room is " << HotelRoom1.Get_Capacity() << endl;
                cout << endl;
                cout << "There are " << HotelRoom1.Get_Status() << " guests staying in the room";
             }
             cout << endl;
             cout << endl;
             cout << "Your room number is " << HotelRoom1.Display_Number();
             cout << endl;
             cout << endl;
             cout << "The rate for this room is " << HotelRoom1.Get_Rate();
             cout << endl;
             cout << endl;
        //chech this guest out?
             cout << "Check this guest out? ('1 = yes' '0' = no) ";
             cin >> checkOut;
             switch(checkOut)
             {
                 case 1:
                     HotelRoom1.Change_Status(0);
                     for(int i = 0; i < 3; ++i )
                     {
                        cout << endl;
                     }
                     cout << "You have checked out of room number " << HotelRoom1.Display_Number();
                     cout << endl;
                     cout << endl;
                     cout << "The capacity of this room is " << HotelRoom1.Get_Capacity();
                     cout << endl;
                     cout << endl;
                     cout << "There are currently " << HotelRoom1.Get_Status() << " occupants";
                     cout << endl;
                     cout << endl;
                     cout << "The rate of this room was " << HotelRoom1.Get_Rate();
                     break;
             }
        //check in new guest?
             cout << endl;
             cout << endl;
             cout << "Check in new guest? ('1 = yes' '0' = no) ";
             cin >> newCustomer;
             for(int i = 0; i < 3; ++i )
                {
                    cout << endl;
                }
             switch (newCustomer)
             {
             case 1:
                HotelRoom HotelRoom2(roomNumber, roomCapacity, roomRate, guestName, status);
                HotelRoom1.Change_Rate(175.00); //Change rate of room
                cout << endl;
                cout << "What is the guest's name: ";
                cin.getline(guestName, 20);
                cout << endl;
                cout << "How many guests will be staying in the room: ";
                cin >> status;
                cout << endl;
                cout << endl;
        //Display new guest information
                if(HotelRoom1.Change_Status(status))
                {
                cout << endl;
                cout << endl;
                cout << "The capacity of this room is " << HotelRoom1.Get_Capacity() << endl;
                cout << endl;
                cout << "There are " << HotelRoom1.Get_Status() << " guests staying in the room";
                }
                cout << endl;
                cout << endl;
                cout << "Your room number is " << HotelRoom1.Display_Number();
                cout << endl;
                cout << endl;
                cout << "The rate for this room is " << HotelRoom1.Get_Rate();
                cout << endl;
                cout << endl;
                 break;
             }
             cout << endl;

        system("PAUSE");
        return 0;
    }   

这是显示CHAGES的更新,详细信息如下。 这是输出快照的链接 https://dl.dropboxusercontent.com/u/34875891/wrongoutput.PNG

char HotelRoom::Display_Guest()
{
    cout << ptr_guest;
}
string HotelRoom::Display_Number()
{
    cout << room_number;
}
int HotelRoom::Change_Status(int roomStatus)
{
    if(roomStatus <= room_capacity )
    {
        occupancy_status = roomStatus;
        return occupancy_status;
    }
    else
        occupancy_status = -1;
}

这些函数声称返回值。 前两个不是,最后一个不是在某些条件下。 调用前两个是未定义的行为。 使用 roomStatus > room_capacity 调用Change_Status也是未定义的行为。

代码可能还有其他问题,但房间里的大象是未定义的行为。 在具有未定义行为时进行任何其他调试理论上都是浪费时间。

最新更新