Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kiyoshi
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
#1

Обращение к элементу динамического массива структур - C++

06.11.2013, 17:54. Просмотров 376. Ответов 5
Метки нет (Все метки)

Само задание: http://cs412722.vk.me/v412722398/4e77/fUkq93u2HDE.jpg
пока написал только это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
struct car
{
    char * nazvanie_proizvoditelya;
    int god_vipuska;
};
 
int main(void)
{
    int kol_vo_avto;
    cout << "Сколько автомобилей поместить в каталог? ";
    cin >> kol_vo_avto;
    car * avto = new car[kol_vo_avto];
    for (int i = 0; i<kol_vo_avto; i++)
    {
        cout << "Автомобиль #" << i+1 << ":\n" <<"Введите производителя: ";
        cin.getline(avto[i]->nazvanie_proizvoditelya);
        cout << "Укажите год выпуска: ";
        cin >> avto[i]->god_vipuska;
    };
    return 0;
}
проблемы со строками:
C++
1
2
cin.getline(avto[i]->nazvanie_proizvoditelya);
cin >> avto[i]->god_vipuska;
myfirst0.cpp:19:22: ошибка: base operand of «->» has non-pointer type «car»
Объясните, пожалуйста *_*
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 17:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к элементу динамического массива структур (C++):

Ошибка (access violation) при обращении к элементу динамического массива структур - C++
Добрый день! Все прекрасно работает если в структуре статические массивы. Но так уж получилось, что есть необходимость задавать размерность...

Что быстрее? Обращение к элементу массива или к элементу структуры? - C++
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на...

Обращение к элементу массива - C++
Как мне обратиться к последнему элементу массива? например: Array // i = 0 тут нужно что бы -1 был последним т.е N-1 //можно ли с...

Обращение к элементу массива - C++
Объясните пожалуйста, что происходит в строке помеченной *** void main(){ char str; char ptr; cin &gt;&gt; str; cout &lt;&lt; ...

Обращение к элементу массива из строк - C++
Здравствуйте! Имеется такой код: string mesiaci = //Massiv iz strok { &quot;Ianvar'&quot;, &quot;Fevral'&quot;, &quot;Mart&quot;, &quot;Aprel'&quot;, ...

Удаление динамического массива структур - C++
Если удалять массив структур как обычно пишут, то при запросе следующей структуры из массива на вывод она отображается. То есть происходит...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
06.11.2013, 17:59 #2
nazvanie_proizvoditelya - это указатель на тип char. Чтобы этот указатель куда-то указывал, надо выделять память. все точно так же, как Вы делали для car * avto =....
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 18:02 #3
C++
1
avto[i].god_vipuska
Добавлено через 1 минуту
и с памятью для nazvanie_proizvoditelya проблема, да. Для строк лучше подходит std::string
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,566
Записей в блоге: 4
06.11.2013, 18:08 #4
Kiyoshi,
Цитата Сообщение от Kiyoshi Посмотреть сообщение
char * nazvanie_proizvoditelya;
это только указатель. Для ввода с консоли это неудачная идея. Лучше импользовать std::string.
Но если хотите использовать указатель, то придётся повозиться. Можно принять ввод в временный буфер :
chat tmp_buf[256]={'\0'};//
забросить в него строку, получить ее длину strlen(tmp_buf), выделить память на единичку больше установив на неё указатель (если он указывает на что-то - освободить сначала, не забыть). Потом скопировать буфер по указателю... Написать конструкторы и деструктор с корректным выделением и освобождением, - само собой.
Kiyoshi
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
06.11.2013, 18:14  [ТС] #5
Ммм.. а не подскажите тогда способ выделения памяти для "nazvanie_proizvoditelya"?

Цитата Сообщение от I.M. Посмотреть сообщение
Для строк лучше подходит std::string
Со стрингом действительно проще
Хочется потренироваться на чаре т.к. этот нюанс понял никак хуже.

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Kiyoshi,

это только указатель. Для ввода с консоли это неудачная идея. Лучше импользовать std::string.
Но если хотите использовать указатель, то придётся повозиться. Можно принять ввод в временный буфер :
chat tmp_buf[256]={'\0'};//
забросить в него строку, получить ее длину strlen(tmp_buf), выделить память на единичку больше установив на неё указатель (если он указывает на что-то - освободить сначала, не забыть). Потом скопировать буфер по указателю... Написать конструкторы и деструктор с корректным выделением и освобождением, - само собой.
О, нет. О буферах я пока не знаю.
Посижу пока ни стринге/массивах чара.
Благодарю за разъяснения
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,566
Записей в блоге: 4
06.11.2013, 18:16 #6
Цитата Сообщение от Kiyoshi Посмотреть сообщение
Хочется потренироваться на чаре
Дык... Лучше же тогда потренироваться просто написав свободную функцию, которая принимает ввод с консоли, выделяет и инициализирует... А потом уже - конструкторы, методы и пр. Это две разные темы.
ps буфер в данном раскладе, это массив char и всё. Если использовать strcpy она сама ноль в конце напишет, так что можно и не инициализировать вначале.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 18:16
Привет! Вот еще темы с ответами:

Очищение динамического массива структур - C++
Здравствуйте, Господа. Есть структура, например такая: typedef struct cont1 { long int n; char name; char hoho; }CONTACT; И...

Обращение к элементам двухмерного динамического массива - C++
Строки в двумерном динамическом массиве расположены не вплотную друг к другу. Тогда почему чтобы получить значение из массива оператор ar...

Косвенное обращение к элементам динамического массива - C++
Доброго времени суток. Необходима помощь с программой. Текст задачи: Заданы два массива А(5) и В(4). Первым на печать вывести массив,...

Обращение к элементу массива через адрес - C++
#include &quot;a.h&quot; #include &lt;iostream&gt; #include&lt;stdio.h&gt; using namespace std; void vvod(float mas,int n); void calc(float...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.11.2013, 18:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru