每當我試圖執行我的代碼時,我的輸出螢屏就會崩潰。這是問題的一部分:
為一個房地產定位器服務宣告一個名為House的類。下面的資訊應該包括 下面的資訊應該包括:
業主:(一個最多20個字符的字串) 地址。(最多20個字符的字串) 臥室。(一個整數) 價格(浮動點) b) 宣告可用的是一個由100個House類的物件組成的陣列。
c) 撰寫一個函式,將值讀入一個 "房子 "物件的成員中。
寫一個函式來讀取House物件的成員值。
d) 撰寫一個驅動程式來測驗你所開發的資料結構和函式。
寫一個驅動程式來測驗你所開發的資料結構和函式。
驅動程式應將房子的條目讀入可用的 陣列中。在輸入資料的代碼之后,你應該撰寫代碼來 輸出你所輸入的資料,以驗證它是否正確。
這里是我的代碼:
class House {
private:
string owner;
字串地址。
int 臥室。
float price;
public:
House(string owner = ""/span>, string address = ""/span>, int bedrooms = 0, float price = 0. 0)
{
this->owner = owner;
this->address = address;
this->bedrooms = 睡房。
this->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地址。
}
int getBedrooms()
{
return bedrooms;
}
float getPrice()
{
return price。
}
void getData()
{
cout << "Enter Owner : ";
getline(cin, owner)。
setOwner(owner);
cout << "輸入地址 : ";
cin >> 地址。
setAddress(地址)。
cout << "臥室數量? : ";
cin >> 臥室。
setBedrooms(bedrooms)。
cout << "價格: "。
Cin >> 價格。
setPrice(價格)。
cout << endl;
}
void display()
{
cout << "業主地址臥室價格" << endl;
cout << getOwner() << " " << getAddress() << " < < getBedrooms() << " " << getPrice() << " " < < endl。
}
};
int main()
{
房屋* 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;
uj5u.com熱心網友回復:
最明顯的問題是,你做了以下事情:
House* h[100] 。
/* ... */
h[time]->getData()。
h的定義創建了一個由100個指向House的指標組成的陣列;它并沒有創建一個單獨的房子 通過h[time]->,你試圖訪問一個據說是由h[time]指向的房子,但是那個房子并不存在。
一個 "C解決方案 "是簡單地將h宣告為一個房屋陣列,并通過.運算子訪問它們:
House h[100] 。
/* ... */
h[time].getData()。
在C 中,我們通常會使用一個向量,并通過push_back()添加房屋。
此外,還有一個小插曲:在自己的行上輸入一個字串或數字后,這是典型的方式(你輸入數字并按下回車鍵),該行末尾的換行仍在待輸入中;連續的getline()將看到這個即時的換行并讀取一個空行。
這發生在你的程式中的每個回圈之后,因為輸入以輸入一個數字結束;然而在下一個房屋輸入的開始,是一個getline(),因為一個名字可以有一個以上的字。因此,程式沒有等待任何用戶輸入,而是分配了一個空字串作為名字。
簡單的解決方法是進行回圈,直到該行不為空。(作為一個副作用,這可以捕捉到用戶不止一次地敲擊回車鍵):
簡單的解決方法是回圈,直到該行不為空。
do
{
getline(cin, owner)。
}while(owner == "") 。
你可能也想讀一整行的地址,邏輯相同。
否則,你的程式就可以正常作業了!
uj5u.com熱心網友回復:
如果你想這樣做,你需要分配它
House* h[100] 。
Like
h[0] = new House( ... ) 。
以此類推。
否則,這應該是可行的
House h[100] 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313114.html
標籤:
上一篇:如何從androidstudio中動態添加的EditTexts向另一個活動發送資料?
下一篇:遞回呼叫私有方法
