2015-08-17 2 views
-1

Я новичок программист, и я создаю программу, которая содержит несколько объектов типа struct. Программа должна принимать пользовательский ввод, но я не знаю, как это сделать. Во-первых, вот код, я использую, чтобы определить-структуру:Создайте массив, содержащий объекты struct C++

struct Apartment{ 
     int number; 
     string owner; 
     string condition; 
}ap; 

И вот код, я использую, чтобы задать для ввода пользователя:

cout << "Enter the apartment number: " << endl; 
cin >> ap.number; 
cout << "Enter the name of the owner: " << endl; 
cin >> ap.owner; 
cout << "Enter the condition: " << endl; 
cin >> ap.condition; 

apartment building[50] = { ap.number, ap.owner, ap.condition}; 

Последняя строка кода, как я Я пытаюсь сохранить объект в массиве, но я не знаю, работает ли он. Позже мне нужно распечатать все объекты, так что было бы неплохо, если бы вы мне тоже помогли. Я использую Visual Studio 2013 как компилятор, если это имеет значение.

+0

Как вы думаете, что делает последняя строка? что у вас там есть «массив квартир = одна квартира». – John3136

+0

Простейшая вещь для вас - создать пустой 'std :: vector ' и 'push_back'' 'Apartment' каждый раз, когда вы его читаете. – paddy

+0

paddy, не могли бы вы объяснить, как это сделать? Я новичок на C++, и у меня есть некоторый опыт работы с Python, поэтому я не совсем уверен, как все работает. –

ответ

1
struct Apartment{ 
    int number; 
    string owner; 
    string condition; 
}ap; 

void AddApartment(vector<Apartment> &vtnew) 
{ 
    Apartment building; 
    cout << "Enter the apartment number: " << endl; 
    cin >> building.number; 
    cout << "Enter the name of the owner: " << endl; 
    cin >> building.owner; 
    cout << "Enter the condition: " << endl; 
    cin >> building.condition; 
    vtnew.push_back(building); 
} 

void DisplayApt(vector<Apartment> vtnew) 
{ 
    vector<Apartment> ::iterator it; 
    for (it = vtnew.begin(); it != vtnew.end(); it++) 
    { 
     cout << "apartment number" <<it->number; 
     cout << "name of the owner" << it->owner; 
     cout << "condition" << it->condition; 
    } 
} 

int main() 
{ 
    vector<Apartment> vt; 
    AddApartment(vt); 
    AddApartment(vt); 
    AddApartment(vt); 
    DisplayApt(vt); 
    return 0; 
} 

Что вы делаете в вашем коде, чтобы объявить массив за квартиру, чтобы провести 50 квартир, но при использовании векторов нам нужно не дать количество заранее, мы можем продолжать добавлять квартиры, не заботясь о размере!

+0

Хорошо, теперь у меня проблема. Он запрашивает объект несколько раз подряд, мне нужно, чтобы он попросил его, а затем вернулся к предыдущей функции, есть ли способ сделать это? –

+0

Не понял, какой объект и что вы имеете в виду? – Nishant

+0

Хорошо, программа похожа на реестр квартир, поэтому у нее есть функция меню. Одна из функций - добавить квартиру, если вы выберете ее, пользователь должен ввести информацию об объекте (номер, владелец, условие). Но он только спрашивает по одному. Затем он возвращается в меню. Я не знаю, понял ли я это на этот раз. –

0

Я думаю, у вас есть путаница здесь.

Apartment building[50] 

означает, что это массив из 50 элементов, и каждый элемент является структурой с типом Apartment.

Например, это должно быть так:

struct Apartment obj1; 
struct Apartment obj2; 
struct Apartment obj3; 

Apartment building[3] = {obj1, obj2, obj3}; 

И мне интересно, что является основной целью «сохранить объект в массиве»?

Каждый элемент массива должен иметь же тип данных и каждое поле структуры может не иметь такой же тип данных, так что вы не должны «сохранить объект в массиве».

1

Прежде всего, давайте поймем, что вы делаете.

 struct Apartment{ 
      int number; 
      string owner; 
      string condition; 
    }ap; 

Во-первых, вы создаете структуру Apartement, которая имеет имя «ap».

cout << "Enter the apartment number: " << endl; 
cin >> ap.number; 
cout << "Enter the name of the owner: " << endl; 
cin >> ap.owner; 
cout << "Enter the condition: " << endl; 
cin >> ap.condition; 

Во-вторых, (предположим, что вы находитесь в своей основной функции), вы просите пользователя ввести некоторую информацию. Вы должны иметь в виду, что только первое слово и остановка в первом пробеле видят, если вы планируете сохранить больше слов, вы должны использовать getline. Смотрите эту ссылку для получения дополнительной информации: http://www.cplusplus.com/doc/tutorial/basic_io/

apartment building[50] = { ap.number, ap.owner, ap.condition}; 

Наконец, ваша последняя линия будет врезаться по двум причинам. Во-первых, потому что квартира типа не существует. Я полагаю, вы хотели написать «Апартамент». Во-вторых, потому что вы не можете создать такой массив. Я предлагаю вам взглянуть на это: http://www.cplusplus.com/doc/tutorial/arrays/

Я не уверен, что вы хотите сделать, поэтому я дам вам образец кода, который спрашивает у пользователя, сколько у него квартиры и спросить информацию о количестве квартиру, которой он владеет.

struct Apartment{ 
      int number; 
      string owner; 
      string condition; 
    }; 

int main() { 
    cout << "Hello, how many apartment do you own?"; 
    int nbAppt = 0; 
    cin >> nbAppt; 
    Apartment appt[nbAppt]; 
    for(int i = 0; i < nbAppt; i++) { 
     cout << "Appartment number " << i << endl; 
     cout << "Enter the apartment number: "; 
     cin >> appt[i].number; 
     cout << "Enter the name of the owner: "; 
     cin >> appt[i].owner; 
     cout << "Enter the condition: " << endl; 
     cin >> appt[i].condition; 
    } 
} 

Ps: Обратите внимание, что я предположил, что вы включили пространство имен std; Пс2: Я не включил никаких релевантных включений.

Смежные вопросы