Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2010, 19:11   #1
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию Как ввести данные в динамический массив структур?

Подскажите пожалуйста, можно ли вводить данные в динамический массив структур c помощью cin >> следующим образом:

Код:
#include <iostream>
using namespace std;
const int Arsize = 20;

struct sponsor 
{
	char name[Arsize];
	double money;
};

int main()
{
	int number;
	cout << "Введите количество спонсоров: ";
	cin >> number;
	sponsor *pt = new sponsor[number];
sponsor one =
{
   cin.get(pt[0]->name, Arsize),
   cin >> pt[0]->money
};
А если нельзя. то как это можно сделать?

Последний раз редактировалось sunplant; 30.04.2010 в 19:30. Причина: Ошибка
sunplant вне форума Ответить с цитированием
Старый 30.04.2010, 19:44   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Сделать это можно перегрузив operator>> для соответствующей структуры. Прочитайте в любой книжке про перегрузку операторов.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.04.2010, 19:49   #3
&&blad&&
Пользователь
 
Регистрация: 24.04.2010
Сообщений: 23
По умолчанию

1.Для начала необходимо придумать название структуры(name1);
2.Если нужна диномическая структура, то название может быть следоющим(*name1);

struct sponsor {
char name[Arsize];
double money;
}*name1;

3.Для перераспределения памяти используем функцию new:
name1=new int[<новый размер структуры>];
4.В структуру введём следоющим обраом:
cin<<name1[<№ элемент>].name;
cin<<name1[<№ элемент>].money;
&&blad&& вне форума Ответить с цитированием
Старый 30.04.2010, 20:50   #4
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию

Компилятор выдает ошибку.
sunplant вне форума Ответить с цитированием
Старый 30.04.2010, 21:07   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
3.Для перераспределения памяти используем функцию new:
name1=new int[<новый размер структуры>];
Начнем с того, что единицей измерения размера является sizeof(char) и поэтому sizeof(int[sizeof(some_struct)]) (страх и ужас!) будет sizeof(int)/sizeof(char)*сколько надо. А sizeof(int) и sizeof(char) вообще-то не обязаны быть равными.
Да и зачем ТАК извращаться?? Не проще ли уж тогда
Код:
sponsor *pt = new sponsor[number];
for (int i = 0; i < number; i++)
 {
 cin >> sponsor[i].name;
 cin >> sponsor[i].money;
 }
Или и вовсе перегрузить operator>> для этой структуры и писать:
Код:
sponsor *pt = new sponsor[number];
for (int i = 0; i < number; i++)
 cin >> sponsor[i];
Ну и до кучи:
Цитата:
функцию new
Оператор new.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.04.2010, 21:14   #6
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию

Спасибо, Гром!
sunplant вне форума Ответить с цитированием
Старый 28.01.2011, 17:10   #7
EddieG
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Начнем с того, что единицей измерения размера является sizeof(char) и поэтому sizeof(int[sizeof(some_struct)]) (страх и ужас!) будет sizeof(int)/sizeof(char)*сколько надо. А sizeof(int) и sizeof(char) вообще-то не обязаны быть равными.
Да и зачем ТАК извращаться?? Не проще ли уж тогда
Код:
sponsor *pt = new sponsor[number];
for (int i = 0; i < number; i++)
 {
 cin >> sponsor[i].name;
 cin >> sponsor[i].money;
 }
Или и вовсе перегрузить operator>> для этой структуры и писать:
Код:
sponsor *pt = new sponsor[number];
for (int i = 0; i < number; i++)
 cin >> sponsor[i];
Ну и до кучи:

Оператор new.


cin >> pt[i].name;
cin >> pt[i].money;
Допущение несогласованных и логически несовместимых представлений - часть человеческого мышления.
EddieG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ввести массив с помощью обобщенного программирования и std library функций? Olga_CS Общие вопросы C/C++ 0 29.05.2009 05:56
Динамический массив структур RaZveDchiK Помощь студентам 1 31.08.2008 21:44
Динамический массив структур Kostyakovich Помощь студентам 4 20.04.2008 21:59