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

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

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

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

06.11.2013, 17:54. Просмотров 359. Ответов 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++
Обращение к элементу массива через адрес C++
Обращение к элементу массива C++
Обращение к элементам двухмерного динамического массива C++
Доступ к элементам динамического массива из структур C++
C++ Обращение к элементу массива из строк
C++ Что быстрее? Обращение к элементу массива или к элементу структуры?
C++ Память для динамического массива структур
C++ Ошибка (access violation) при обращении к элементу динамического массива структур
Удаление динамического массива структур C++
Обращение к элементу массива C++
Очищение динамического массива структур 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
Комп_Оратор)
6366 / 3013 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
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
Комп_Оратор)
6366 / 3013 / 297
Регистрация: 04.12.2011
Сообщений: 8,102
Записей в блоге: 3
06.11.2013, 18:16     Обращение к элементу динамического массива структур #6
Цитата Сообщение от Kiyoshi Посмотреть сообщение
Хочется потренироваться на чаре
Дык... Лучше же тогда потренироваться просто написав свободную функцию, которая принимает ввод с консоли, выделяет и инициализирует... А потом уже - конструкторы, методы и пр. Это две разные темы.
ps буфер в данном раскладе, это массив char и всё. Если использовать strcpy она сама ноль в конце напишет, так что можно и не инициализировать вначале.
Yandex
Объявления
06.11.2013, 18:16     Обращение к элементу динамического массива структур
Ответ Создать тему
Опции темы

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