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

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

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

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

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

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

Добавлено через 15 минут
Со считывание разобрался, а можете помочь с тем чтобы данные записывать в разные элементы структуры
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 07:06     Из файла записать данные в структуру данных
Посмотрите здесь:
C++ Записать\прочесть данные в\из бинарного файла в инкапсулированну структуру
C++ Как правильно считать (записать) структуру из файла?
C++ Не записываются данные из файла в структуру
C++ Занести данные в структуру из файла
Считать данные из файла в структуру C++
Считывание данных из файла в структуру C++
C++ Чтение данных из файла в структуру
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 09:02     Из файла записать данные в структуру данных #16
Попробую ответить на вопрос, как я его понял. В мейне у тебя будет примерно так:
C++
1
2
3
TKartoteka* ptr=new TKartoteka();
ptr->LoadFromFile();
ptr->SortPrint();
Ничего никуда передавать не нужно
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 09:10  [ТС]     Из файла записать данные в структуру данных #17
А как тогда реализовывать SortPrint() чтобы метод был рекурсивный, объект структуры будет
C++
1
this->pRoot
?
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 09:23     Из файла записать данные в структуру данных #18
2 варианта: можно в струкуру дерева добваить метод SortPrint. Выглядеть он будет примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TKartoteka::BinaryTree::SortPrint()
{
 //какието действия
 if(/*некое условие*/)
 {
  left->SortPrint();
 }
 //какието действия
 if(/*некое условие*/)
 {
  right->SortPrint();
 }
 //чтонибуть там еще
};
Добавлено через 2 минуты
Ну и соответственно вызывать её из TKartoteka::SortPrint примерно так:
C++
1
2
3
4
TKartoteka::SortPrint()
{
 pRoot->SortPrint();
};
Добавлено через 2 минуты
Либо можно крутить рекурсию на функции TKartoteka::SortPrint, правда ей уже, в таком случае, и впрямь придётся передавать указатель на узел дерева примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TKartoteka::SortPrint(BinaryTree*pTree)
{
 //какието действия
 if(/*некое условие*/)
 {
  SortPrint(left);
 }
 //какието действия
 if(/*некое условие*/)
 {
  SortPrint(right);
 }
 //чтонибуть там еще
};
Добавлено через 2 минуты
можно перегрузить функцию SortPrint сделав два варианта с разными параметрами, например TKartoteka::SortPrint() будет вызывать TKartoteka SortPrint(BinaryTree*) передавая ей свой pRoot
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 09:42  [ТС]     Из файла записать данные в структуру данных #19
Наверное так и сделаю. А с считыванием из файла что делать, я вот то что написал, а по другому нет идей

Добавлено через 12 минут
И ещё вопрос, как можно упорядоченно вывести элементы, то есть если вот так
C++
1
2
3
4
if (!ptr) return;
    SortPrint(ptr->left);
    cout << ptr->TitleComposition << " " << ptr->Executor << " " << ptr->TitleAlbum << "\n";
    SortPrint(ptr->right);
то это просто вывод, а как их ещё упорядочить по ключи, или это вообще лучше делать при записи?
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 10:07     Из файла записать данные в структуру данных #20
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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(){return(strlen(&TitleComposition[0]));};// ololo
        void PrintEl();
        BinaryTree* left;
        BinaryTree* right;
        BinaryTree(){ZeroMemory(this, sizeof(BinaryTree));};//проще обнулить все чем присваить каждому члену ноль
    }*pRoot;//надаже и данные каките добавить в класс кроме обьявлений структур и прочего
    void LoadFromFile();//мне кажеться логичнее from а не to (-:
    void SortPrint();
public:
 TKartoteka(){ZeroMemory(this, sizeof(TKartoteka));};
};
 
 
void TKartoteka::LoadFromFile()
{
 char fname[]="C://MyFile.txt";
 FILE* f;
    
 f=fopen(fname,"rt");
 while (!feof(f))
 {
  BinaryTree*np=new BinaryTree();
  fscanf(f, "%s %s %s %s %d %d %d ", np->TitleComposition, np->Executor, np->TitleAlbum, np->Genre, &np->Year, &np->Duration, &np->ID);
  if(!pRoot)//если картотека пустая значит это первая запись из файла 
  {
   pRoot=np;//и она будет корнем
  }
  else
  {
   BinaryTree*pCur=pRoot;//начинаем обход дерева с корня
someloop:
   if(pCur->ID<np->ID)//значит нужно влево
   {
    if(pCur->left)//слева уже есть дерево?
    {
     pCur=pCur->left;
     goto someloop;
    }
    else          //ах нету? значит будет
    {
     pCur->left=np;
    };
   }
   else            //или вправо
   {  
    if(pCur->right)//справа уже есть дерево?
    {
     pCur=pCur->right;
     goto someloop;
    }
    else          //ах нету? значит будет
    {
     pCur->right=np;
    };
   };
  };
  fclose(f);
 }
};
 
 
int main()
{
 TKartoteka kart;
 kart.LoadFromFile();
  _getch();
    return 0;
}
Я не тестировал, попробуй - работает/нет?

Добавлено через 44 секунды
ваще жуть если честно, обход дерева нужно тоже рекурсией делать, я поленился

Добавлено через 9 минут
fclose(а) за одну скобку переместить надо. Нестерпел, захотелось позапускать)
SKS-65
5 / 5 / 1
Регистрация: 18.10.2011
Сообщений: 187
03.07.2013, 10:12  [ТС]     Из файла записать данные в структуру данных #21
Вроде работает, спасибо большое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 11:52     Из файла записать данные в структуру данных
Еще ссылки по теме:
C++ Запись данных из файла в структуру
Ввод данных в структуру из файла C++
Чтение данных из файла в структуру C++
Записать данные из файла в стек C++
Записать данные из файла в матрицу C++

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

Или воспользуйтесь поиском по форуму:
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
03.07.2013, 11:52     Из файла записать данные в структуру данных #22
Цитата Сообщение от Praktolock Посмотреть сообщение
функции strcpy нужен указатель на строку. Вместо:

C++
1
strcpy(this->TitleComposition, "");
нужно писать примерно так:

C++
1
strcpy(&TitleComposition[0], "");
это не правда, я пьяный наверно был
Yandex
Объявления
03.07.2013, 11:52     Из файла записать данные в структуру данных
Ответ Создать тему
Опции темы

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