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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 20:34   #1
Snorlax712
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 11
По умолчанию Массив указателей на структуру (C++)

Всем привет. Такая проблема, не знаю как сделать прогу. Задание: Подготовьте массив указателей на STUDENT на 50 элементов.
Считайте все записи из файла "6.dat" .
Для чтения каждой отдельной записи осуществите динамический захват памяти.
Соответствующий адрес храните в массиве указателей.

Мой код до 2 пункта:

Код:
#include <stdio.h>

int main()
{
	struct student {
	char fio[20];
	int number;
	int success[5];
	};
	student* m[50];
	FILE *f1;
	f1 = fopen("6.dat","rb");
	for(int i=0;;i++) {
	fread(&(m[i]->fio),sizeof(m[i]->fio),1,f1); //тут непонятно
	if(feof(f1)) break;
	}
	return 0;
}
Бинарный файл есть. собственно там где идёт считывание фамилии вылетает ошибка.. помогите..

Последний раз редактировалось Snorlax712; 31.03.2012 в 20:38.
Snorlax712 вне форума Ответить с цитированием
Старый 31.03.2012, 21:03   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
Для чтения каждой отдельной записи осуществите динамический захват памяти.
Код:
#include <stdio.h>

int main()
{
	struct student {
	char fio[20];
	int number;
	int success[5];
	};
	student* m[50];
	FILE *f1;
	f1 = fopen("6.dat","rb");
	for(int i=0;;i++) {
	m[i]=(student*)malloc(sizeof(student));
        fread(&m[i], sizeof(student), 1, f1);
	//fread(&(m[i]->fio),sizeof(m[i]->fio),1,f1); 
	if(feof(f1)) break;
	}
	//потом нужно каждый указатель освободить командой free();
	return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.03.2012 в 21:07.
BDA вне форума Ответить с цитированием
Старый 31.03.2012, 21:32   #3
Snorlax712
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 11
По умолчанию

Спасибо большое!! А как сделать без malloc, мы только new и delete проходим сейчас.
Snorlax712 вне форума Ответить с цитированием
Старый 31.03.2012, 22:03   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Попробуйте так:
Код:
#include <iostream>
 
using namespace std;
 
int main()
{
        struct student {
        char fio[20];
        int number;
        int success[5];
        };
        student* m[50];
        FILE *f1;
        f1 = fopen("6.dat","rb");
        for(int i=0;;i++) {
        m[i]=new student;
        fread(&m[i], sizeof(student), 1, f1);
        //fread(&(m[i]->fio),sizeof(m[i]->fio),1,f1); 
        if(feof(f1)) break;
        }
        //потом нужно каждый указатель освободить командой delete;
        return 0;
}
Просто я изучаю пока что только Си и не могу сказать ничего по синтаксису Си++.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица указателей на структуру Roker C# (си шарп) 6 24.06.2011 16:53
Массив указателей nattaella Компоненты Delphi 2 11.06.2011 16:40
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
массив указателей RUSt88 Общие вопросы C/C++ 12 10.01.2010 11:11
массив указателей в С ++ серг Помощь студентам 1 14.12.2009 18:49