Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
#1

Из файла записать данные в структуру данных - C++

03.07.2013, 07:06. Просмотров 1225. Ответов 21
Метки нет (Все метки)

Скажите пожалуйста, как можно из файла записать данные в структуру данных? Я пробую fread, он не так работает

Добавлено через 15 минут
Со считывание разобрался, а можете помочь с тем чтобы данные записывать в разные элементы структуры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 07:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из файла записать данные в структуру данных (C++):

Записать\прочесть данные в\из бинарного файла в инкапсулированну структуру - C++
Здравствуйте форумчане. Как записать\прочесть данные в\из бинарного файла в инкапсулированну структуру такого вида? struct obj { ...

Ввести данные в файл, и записать данные с файла в массив структур - C++
Ввести все данные в файл, и записать данные с файла в структуру. Помогите ввести и вывести структуру из файла. Допускается - и желательно...

Как правильно считать (записать) структуру из файла? - C++
не хочет правильно читать, вроде пишет, вроде правильно, не уверен. Заранее благодарен за помощь void __fastcall...

Не записываются данные из файла в структуру - C++
ф-ция из файла считывает правильно, но почему-то в структуру не записывает #include<iostream> #include<fstream> using namespace...

Занести данные в структуру из файла - C++
Добрый день. Есть структура с данными о клиенте фирмы. В файле содержится информация про клиента: Имя,Фамилия,номер телефона...Как сделать...

Считать данные из файла в структуру - C++
Есть одна структура, есть файл, в файл я эту структуру записал. Теперь мне надо из файла опять записать данные в другую структуру. Считал...

21
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 07:39 #2
какие данные в какие элементы тебе надо записать

Добавлено через 11 секунд
хоть кода кусок покажи
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 07:56  [ТС] #3
Структура данных бинарное дерево, а данные 7 полей: 4 строки и 3 числа, я вот так сделал, ещё не проверял правильно ли работает, надо писать метод по выводу дерева, и тут тоже возник вопрос, как упорядоченно по ключу вывести
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void TKartoteka::LoadIntoTheFile(TKartoteka* ptr)
{
    BinaryTree* np=new BinaryTree();
    char fname[]="C://MyFile.txt";
    FILE* f;
    
    f=fopen(fname,"rt");
while (!feof(f))
{
    fscanf(f, "%s %s %s %s %d %d %d ", np->TitleComposition, np->Executor, np->TitleAlbum, np->Genre, &np->Year, &np->Duration, &np->ID);
    if (!ptr->pRoot)
        pRoot=np;
    else
    {
        BinaryTree* pCur=pRoot;
        BinaryTree* pPrev;
        bool left;
        do
        {
            pPrev=pCur;
            if(np->ID<pCur->ID)
            {
                pCur=pCur->left;
                left=true;
            }
            else
            {
                pCur=pCur->right;
                left=false;
            }
        }while(pCur);
        if (left)
            pPrev->left=np;
        else
            pPrev->right=np;
    }
}
        fclose(f);
}
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:15 #4
Исполнитель - экзекутор? (хорошая шутка) Покажи больше кода - какие данные-члены у тебя в классах TKartotera и BinaryTree. А какой член узла дерева у тебя играет роль ключа?
Зачем ты в TKartoteka::TKartoteka передаешь указатель?
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:20  [ТС] #5
Цитата Сообщение от Praktolock Посмотреть сообщение
Зачем ты в TKartoteka::TKartoteka передаешь указатель?
Не хватило ума, как по другому написать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class TKartoteka
{
private:
    struct BinaryTree
    {
        char TitleComposition [30];
        char TitleAlbum [30];
        char Executor [30];
        char Genre[30];
        int Year;
        int Duration;
        long int ID;
        short num;
        long int GenerationID();
        void PrintEl();
        BinaryTree* left;
        BinaryTree* right;
 
BinaryTree()
{
    ID=GenerationID();
    strcpy(this->TitleComposition, "");
    strcpy(this->TitleAlbum, "");
    strcpy(this->Executor, "");
    this->Year=0;
    strcpy(this->Genre, "");
    this->Duration=0;
    this->num=0;
    this->left=NULL;
    this->right=NULL;
}
    };
    BinaryTree* pRoot;//корневой
public:
    TKartoteka(){pRoot=NULL;}
    
    void SortPrint(BinaryTree* ptr);
    void LoadIntoTheFile(TKartoteka* ptr);
};
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:31 #6
Цитата Сообщение от SKS-65 Посмотреть сообщение
Не хватило ума, как по другому написать)
просто void TKartoteka::TKartoteka(){...};
Функции члену передаётся секретный указатель this на экземпляр класса в рамках которого вызван метод, т.е. всемто ptr->какой-точленилифункция можно написать this->какой-точленилифункция, а еще проще просто какой-точленилифункция, безо всяких указателей. Я серьёзно, для обращения к членам данного экземпляра класса в функциях членах никаких указателей не нужно, если только функция не static.
Теперь по порядку

Добавлено через 6 минут
функции strcpy нужен указатель на строку. Вместо:
C++
1
strcpy(this->TitleComposition, "");
нужно писать примерно так:
C++
1
strcpy(&TitleComposition[0], "");
т.е. передаём ей указатель на первый элемент массива. И опять же никаких указателей на экземпляр класса без this прекрасно всё будет работать
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:34  [ТС] #7
Глупый может вопрос, но всё же спрошу потому что не понимаю, какого массива? у нас же дерево
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:35 #8
хотя... я не понял как задумывался у тебя класс картотека. BinaryTree() - это конструктор структуры BInaryTree? Или "просто член" класса TKartoteka?

Добавлено через 1 минуту
строка - это массив символов.
C++
1
char TitleComposition [30];
это объявление массива из char'ов
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:37  [ТС] #9
Конструктор структуры
BinaryTree это как отдельный элемент дерева, узел, а TKartoteka это само дерево
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:43 #10
давай немного модифицируем класс вот примерно таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class TKartoteka
{
private:
    struct BinaryTree
    {
        char TitleComposition [30];
        char TitleAlbum [30];
        char Executor [30];
        char Genre[30];
        int Year;
        int Duration;
        long int ID;
        short num;
        long int GenerationID();
        void PrintEl();
        BinaryTree* left;
        BinaryTree* right;
        BinaryTree()
        {
            ID=GenerationID();
            strcpy(&TitleComposition[0], "");
            strcpy(&TitleAlbum[0], "");
            strcpy(&Executor[0], "");
            Year=0;
            strcpy(&Genre[0], "");
            Duration=0;
            num=0;
            left =NULL;
            right=NULL;
        };
    }pRoot*;//
    void LoadFromFile();//мне кажеться логичнее from а не to (-:
    void SortPrint();
};
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:49  [ТС] #11
Цитата Сообщение от Praktolock Посмотреть сообщение
мне кажеться логичнее from а не to (-:
)там просто до этого Save был, не исправил,
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:50 #12
Нестрашо . Я накосячил немного, там вместо pRoot* естественно *pRoot - не могу отредактировать пост сейчас
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:51  [ТС] #13
А метод вывода на экран (SortPrint()) он же рекурсивный должен быть, разве нет?
0
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 08:53 #14
Да, именно таким он и должен быть
0
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 08:58  [ТС] #15
Тогда получается
C++
1
void SortPrint(BinaryTree* ptr)
А в функции мэйн, когда объявляем объект TKartoteka* ptr=new TKartoteka();, какой объект структуры нужно передавать?
0
03.07.2013, 08:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 08:58
Привет! Вот еще темы с ответами:

Как скачать с базы данных sqllite нужные мне данные в структуру? - C++
Подскажите пожалуйста, работаю через sqllite, как скачать с базы данных нужные мне данные, например в структуру rc = sqlite3_exec(db,...

Чтение данных из файла в структуру - C++
Нужно считать данные с блокнота и поработать с ними. программу написала, но подчеркивает mass что не так #include &quot;stdafx.h&quot; ...

Чтение данных из файла в структуру - C++
Необходимо считать данные из блокнота, а в последствии работать с ними,написала,но не работает, помогите , пожалуйста. int...

Считывание данных из файла в структуру - C++
из файла нужно считать данные и записать их в структуру. данные из файла: Петров П.П. С++ для чайников 2000 Программирование ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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