Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамический массив структур, создание динамического массива структур 
:(
    Опции темы
loopz
Дата 3.9.2012, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



посмотрел существующее вроде такое не встретил 
вопрос---цель создание структуры определенного типа(марка машины и год производства) это просто но есть еще цель спрашивать у пользователя количество машин то есть сделать так что в программе число структур (массив) зависел от введенного числа то есть мысль такая
Код

#include "stdafx.h"
#include<iostream>
using namespace std;
struct car{
    char name[40];
    int year;
};
int main(){
    int a;
    cout<<"How many cars you want to add ?" <<endl;
    cin>>a;
    car *type[a]= new car[a];
...........

но идет ошибка---что число массивов при объявлении должно быть константой ...по идее логично что программа хочет знать кол выделяемой памяти так вот как можно обойти эту проблему или что я делаю не так???
PM MAIL   Вверх
azesmcar
Дата 3.9.2012, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



замени
Код

car *type[a]= new car[a];

на
Код

car *type= new car[a];

PM   Вверх
loopz
Дата 3.9.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



Цитата(azesmcar @ 3.9.2012,  13:46)
замени
Код

car *type[a]= new car[a];

на
Код

car *type= new car[a];

пробовал...но возникла проблемы адрессации .....
Код

#include "stdafx.h"
#include<iostream>
using namespace std;
struct car{
    char name[40];
    int year;
};
int main(){
    int a;
    cout<<"How many cars you want to add ?" <<endl;
    cin>>a;
    cin.get();
    car *type= new car[a];
    int i;
    for(i=1;i<=a;i++){
        cout<<"Please enter the mark"<<endl;
        cin.getline((*type).name,39);
        //cin.get();
        cout<<"Please enter the year of made " <<endl;
        cin>>(*type).year;
        cin.get();
    }
            cout <<"here your choise "<< (*type).year <<" "<<(*type).name<<endl;
    delete []type;

    return 0;
}


выводит только последнее ....что весьма логично) пока моя мысля тормозит...может быть применить смещение по адресу &(*type).name + ----на размер используемого типа влево\вправо

Это сообщение отредактировал(а) loopz - 3.9.2012, 15:39
PM MAIL   Вверх
bsa
Дата 3.9.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
    for(i = 0; i < a; ++i){
        cout<<"Please enter the mark"<<endl;
        cin.getline(type[i].name,39);
        //cin.get();
        cout<<"Please enter the year of made " <<endl;
        cin>>type[i].year;
        cin.get();
    }
    do {
       cout << "Please input car #: " << flush;
       cin >> i;
    } while((i < 1) || (i > a));
    --i;
    cout << "You select " << type[i].year << " " << type[i].name << endl;

PM   Вверх
loopz
Дата 4.9.2012, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



спасибо за помощь ) это немного не то что я хотел но очень интересно в плане чего то нового) а мой код окончательный такой 
Код

int main(){
    int a;
    cout<<"How many cars you want to add ?" <<endl;
    cin>>a;
    cin.get();
    car *type= new car[a];
    int i;
    for(i = 0; i < a; ++i){
        cout<<"Please enter the mark"<<endl;
        cin.getline(type[i].name,39);
        cout<<"Please enter the year of made " <<endl;
        cin>>type[i].year;
        cin.get();
    }
    int b;
    cout<<"here your choise  "<<endl;
    for(b=0;b<a;b++){
    cout<<type[b].year << "  "<< type[b].name <<endl;
}

просто была цель выводить все введенные данные сразу вот) спасибо

Это сообщение отредактировал(а) loopz - 4.9.2012, 07:35
PM MAIL   Вверх
borisbn
Дата 4.9.2012, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



loopz, не хватает только удаления выделенного массива в конце
Код
delete [] type;

и ещё... так... повыделываться... как ты считаешь, по именам переменных, которые ты выбрал, можно понять за что они отвечают ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
loopz
Дата 4.9.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



ну да но это просто урок из книги стивена прата ) а так там еще и комментов не хватает ))) воот а так да делет у меня есть конечно ) я просто до этого тему про new читал ...воот 
PM MAIL   Вверх
borisbn
Дата 4.9.2012, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(loopz @  4.9.2012,  10:35 Найти цитируемый пост)
я просто до этого тему про new читал

насколько я понимаю, там должно было быть про соответствующий delete  smile 

Это сообщение отредактировал(а) borisbn - 4.9.2012, 10:37


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 4.9.2012, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



loopz, комментарии пишут там, где алгоритм достаточно сложен. Если алгоритм прост, то достаточно просто самодокументируемого кода. А чтобы он был таким необходимо и достаточно давать разумные имена константам, переменным и функциям.
PM   Вверх
loopz
Дата 4.9.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



спасибо учту)
PM MAIL   Вверх
borisbn
Дата 4.9.2012, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



loopz, сравни свой код и этот
Код
#include<iostream>

using namespace std; // кстати, не советую. лучше так:
//using std::cout;
//using std::cin;
//using std::endl;

struct Car {
    char name[40];
    int year;
};

int main()
{
    int carsCount;
    cout << "How many cars you want to add ?" << endl;
    cin >> carsCount;
    cin.get();
    Car * cars = new Car[ carsCount ];
    for ( int i = 0; i < carsCount; ++i ) {
        cout << "Please enter the mark" << endl;
        cin.getline( cars[ i ].name, 39 );
        cout << "Please enter the year of made " << endl;
        cin >> cars[ i ].year;
        cin.get();
    }
    cout << "here your choise  " << endl; // придираться, так с музыкой - а почему "here" с маленькой буквы ? :-)
    for ( int i = 0; i < carsCount; ++i ) {
        cout << cars[ i ].year << "  " << cars[ i ].name << endl;
    }
    delete [] cars;
}


Добавлено через 7 минут и 1 секунду
ну и напоследок...
"How many cars you want to add" - неправильно. нужно "How many cars do you want to add"
"Please enter the mark" - наверное, правильнее будет "model" или "brand"... хотя, могу ошибаться
"here your choise" - неправильно. нужно "here is your choise"

Это сообщение отредактировал(а) borisbn - 4.9.2012, 12:10


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
loopz
Дата 4.9.2012, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



Кстати о птичках спс за советы ) все по делу а вот у меня тогда еще вопрос ---
Код

#include<iostream>
using namespace std; // кстати, не советую. лучше так:
//using std::cout;
//using std::cin;
//using std::endl;

чем так лучше?? какие есть риски в объявлении всего пространства имен ??? 
PM MAIL   Вверх
bsa
Дата 4.9.2012, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



loopz, риски в том, что у тебя в глобальное пространство имен попадает куча всего, что тебе не нужно. Таким образом, снижается количество "свободные" названий для функций и переменных. Более того, даже этот способ не рекомендуется. Нужно или всегда указывать пространство имен, или открывать нужные символы в очень узких областях видимости (внутри блока {}), или давать псевдонимы для пространств имен (например: namespace popt = boost::program_options и в дальнейшем использовать popt вместо boost::program_options).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.