【问题标题】:c++ code not working, my output screen crashesc++ 代码不工作,我的输出屏幕崩溃
【发布时间】:2021-09-16 10:49:19
【问题描述】:

每当我尝试执行我的代码时,我的输出屏幕就会崩溃。这是问题的一部分:

为房地产定位器服务声明一个名为 House 的类。这 应包括以下信息:

  • 所有者:(最多 20 个字符的字符串)
  • 地址:(最多20个字符的字符串)
  • 卧室:(整数)
  • 价格(浮点数)

b) 声明一个包含 100 个 House 类对象的数组。

c) 编写一个函数将值读入对象的成员中 房子。

d) 编写一个驱动程序来测试数据结构和 您开发的功能。

驱动程序应将内部条目读入可用的 大批。在输入数据的代码之后,您应该编写代码 输出您输入的数据以验证它是否正确。

这是我的代码:

class House {
private:
    string owner;
    string address;
    int bedrooms;
    float price;

public:
    House(string owner = "", string address = "", int bedrooms = 0, float price = 0.0)
    {
        this->owner = owner;
        this->address = address;
        this->bedrooms = bedrooms;
        this->price = price;
    }
    void setOwner(string owner)
    {
        this->owner = owner;
    }
    void setAddress(string address)
    {
        this->address = address;
    }
    void setBedrooms(int bedrooms)
    {
        this->bedrooms = bedrooms;
    }
    void setPrice(float price)
    {
        this->price = price;
    }
    string getOwner()
    {
        return owner;
    }
    string getAddress()
    {
        return address;
    }
    int getBedrooms()
    {
        return bedrooms;
    }
    float getPrice()
    {
        return price;
    }
    void getData()
    {
        cout << "Enter Owner : ";
        getline(cin, owner);
        setOwner(owner);
        cout << "Enter Address : ";
        cin >> address;
        setAddress(address);
        cout << "Number of Bedrooms? : ";
        cin >> bedrooms;
        setBedrooms(bedrooms);
        cout << "Price : ";
        cin >> price;
        setPrice(price);
        cout << endl;
    }
    void display()
    {
        cout << "Owner \t Address \t Bedrooms \t Price" << endl;
        cout << getOwner() << "\t" << getAddress() << "\t" << getBedrooms() << "\t" << getPrice() << "\t" << endl;
    }
};
int main()
{

    House* h[100];
    int time = 0;
    char yesorno;

    do {

        h[time]->getData();
        h[time]->display();

        cout << "Do you wish to continue ?";
        cin >> yesorno;
        time++;
    } while (yesorno == 'y' || yesorno == 'Y');
    return 0;
}

【问题讨论】:

  • 你是否已经学会了如何在c++中创建类/
  • h 的元素未初始化。你的意思是House h[100]
  • 指令清楚地说“一个包含 100 个 House 类对象的数组”,而不是“一个包含 100 个指向 House 类对象的指针的数组”。您为什么决定不按照说明进行操作?

标签: c++ oop


【解决方案1】:

最明显的问题是你做了以下事情:

House* h[100];
    /* ... */
        h[time]->getData();

h 的定义创建了一个包含 100 个指向House 的指针的数组;它不会创建一个房子!使用h[time]-&gt;,您尝试访问据称由h[time] 指向的房子,但该房子不存在。

“C 解决方案”是简单地将 h 声明为 房屋数组,并通过 . 运算符访问它们:

House h[100];
    /* ... */
        h[time].getData();

在 C++ 中,通常会使用向量并通过 push_back() 添加房屋。


此外,还有一个小问题:在自己的行中输入字符串或数字后,这是典型的方式(输入数字并按 Enter),该行末尾的换行符仍在待处理的输入;连续的getline() 将看到立即换行并读取一个空行。

这发生在程序中的每个循环之后,因为输入以输入数字结束;然而,在下一个房子输入的开头是getline(),因为一个名字可以有多个单词。因此程序不会等待任何用户输入,而是分配一个空字符串作为名称。

简单的解决方法是循环直到该行不为空。 (作为副作用,这会导致用户多次按 Enter):

do
{
    getline(cin, owner);
}while(owner == "");

您可能还想用相同的逻辑读取一整行的地址。

否则你的程序运行良好!

【讨论】:

  • 非常感谢您的帮助!!
  • @codeplayer 总是乐于提供帮助。我还在这个过程中学习自己。
【解决方案2】:

如果你想这样做,你需要分配它

House* h[100];

喜欢

h[0] = new House( ... );

等等。

否则这应该可以工作

House h[100];

【讨论】:

  • 我想downvote 是因为草率的语言?因为内容恰好是正确的。但事实上,vivek,在这里写俚语通常不受欢迎。
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
相关资源
最近更新 更多