Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
29 / 19 / 10
Регистрация: 24.02.2015
Сообщений: 124

Указатели. Создать из текстового файла

23.04.2017, 07:23. Показов 698. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть
Класс описывающий выходы из локации (указатели к другим локациям):LocationWay
Конструктор выглядит примерно так:
LocationWay("AnsiString text, LocationNode *node);
Класс описывающий локацию(к примеру текст локи): Класс LocationNode - содержит в себе вектор <LocationWay>ways
Класс описывающий мир(содержит карту всех локаций и их связи):LocationMap

к примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LocationMap::init(){
//создаем 3 локации
LocationNode *loc0 = new LocationNode("loc0");
LocationNode *loc1 = new LocationNode("loc1");
LocationNode *loc2 = new LocationNode("loc2");
 
 
//заполняем пути из локации ссылками на локации
loc0->ways.push_back(LocationWay("go to loc1", loc1 ));
loc0->ways.push_back(LocationWay("go to loc2", loc2 ));
 
loc1->ways.push_back(LocationWay("go to loc0", loc0 ));
loc1->ways.push_back(LocationWay("go to loc2", loc2 ));
 
loc2->ways.push_back(LocationWay("go to loc1", loc1 ));
loc2->ways.push_back(LocationWay("go to loc0", loc0 ));
 
 _map.push_back(loc1);
 _map.push_back(loc2);
 _map.push_back(loc3);
 
      cur =_map[0];
}
Этот вариант работает прекрасно.
Но! Описывать все локации в коде это неудобно.
решил, буду описывать в текстовичке.
Структура файла такова:
Количество локаций
Имя локации1
количество выходов с локи
первый выход
куда ведет
второй выход
куда ведет
третий выход
куда ведет
......
последний
куда ведет
Имя локации2
количество выходов с локи
первый выход
куда ведет
второй выход
куда ведет
третий выход
куда ведет
......
последний
куда ведет


В процессе столкнулся с тем, что где-то напортачил с памятью.

Облегченный код:
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
void LocationMap::init(std::string path)
{   String LocName;
    std::string curline;
    int exit_count,count;//количество выходов, общее количество локаций
    ifstream file(path.c_str());// открываю файл
    std::vector<LocationNode> LNs;//вектор локаций
 
    if (file.is_open()) {
        while(! file.eof()){
        //получаем общее число локаций
        getline(file,curline);
        count = std::atoi(curline.c_str());
        curline="";
                //теперь считываю столько раз, сколько у меня локаций
        for(int i = 0; i < count; i++){
        AnsiString Empty="Empty";
        LNs.push_back(LocationNode lc(Empty,Empty,Empty));
                /*закидываю пустые локации в вектор,
        дабы можно было расставлять связи. читаю с 0й локации,
        сразу же добавляю связи. но связь может идти на локацию 32,
        которой еще нет. Поэтому решил создать все локации сразу.*/
        }
        for(int i=0;i< count; i++){
        getline(file,curline);
        LocName=String(curline.c_str(),curline.length());
        //размещаем новый элемент в вектор
        LNs[i]._name = LocName;
        // заполнили локу, теперь расставляем связи
        //узнаем количество выходов
        getline(file,curline);
        exit_count = std::atoi(curline.c_str());
        //exit_count - количество выходов(связей)
            for (int j = 0; j < exit_count; j++) {
            std::string _waytext,sid; //
            String waytext;
            getline(file,_waytext);// считываем описание путя и линк к другой локе
            getline(file,_sid);
            waytext = String(_waytext.c_str(),_waytext.length());
            int id= std::atoi(_sid.c_str());
            LNs[i].ways.push_back(LocationWays(waytext, &LNs[id]));
            //размещаем каждый выход в вектор. к локации
            }
        }
       }
      }
      //закидываем всё в мап
      for(int i = 0;i<LNs.size();i++)
      _map.push_back(&LNs[i]);
      cur =_map[0];
      file.close();
      LNs.clear();
      }

Количество записей он создает правильно. Но, aсcess violation каждый раз, когда пытаюсь обратиться к локации.

Кто подскажет?

Добавлено через 6 минут
Правило "выкладываешь на форум и тут же сам находишь решение" опять сработало.

Сделал вектор указателей вместо статичного и всё заработало. Пора спать крч х) Спасибо за внимание
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2017, 07:23
Ответы с готовыми решениями:

Создать таблицу, которая выводила бы данные из текстового файла
Работаю в среде Visual studio 2012 professional. Перерыл все, что мог, но все равно не могу создать таблицу, которая выводила бы данные из...

Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных...
Вообщем вот такое задание: Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных. Элементы...

Добавить в конец первого текстового файла содержимое второго текстового файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2017, 07:23
Помогаю со студенческими работами здесь

Создать стек, содержащий считанные из текстового файла координаты точек
Помогите пожалуйста . В текстовом файле записаны координаты материальных точек . Создать стек, содержащий считанные из текстового файла...

Указатели для упорядочения строк текстового файла в алфавитном порядке
Написать программу для упорядочения строк текстового файла в алфавитном порядке используя Указатели. Требования к программе: ...

Создать два списка из текстового файла
Дано: текстовый файл с целыми числами Требуется: создать два списка. Первый из положительных чисел, второй из отрицательных списка из...

Как из текстового файла создать ассоциативный массив?
Имеется текстовый файл вида: Иванов:Петр; Петров:Иван; Сидоров:Иван; и тд. Первое значение уникально, второе нет... ...

Создать массив, содержащий действительные числа из текстового файла.
Помогите!!! Очень срочно нужно!!! 4. Дан текстовый файл input.txt, содержащий действительные числа (количество чисел в файле не превышает...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru