Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как одну перем. записать в разные узлы структуры? 
:(
    Опции темы
Killer_13
  Дата 3.4.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Всех с наступающими праздниками. smile

Припустим читаем из файла 6 строчек.

Денис
Иванов
1986

Ванька
Морозов
1984

нужно теперь эти строки записать в структуру...
Вот только не пойму как 
вот так выводится на экран эти строки.

Код

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

    struct proba{
        proba *next;

        string Name;
        string Family;
        int Jahr;
    };

int main()
{
    ifstream dat_read("rfile.txt");

    string s;
    for(int i=0;i<7;i++){
        getline(dat_read, s);
        cout <<s<<endl;
    }

   dat_read.close();

    return 0;
}


Вопрос в том, как мне заносить одну и ту же "s" в разные узлы.

Спасибо.
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

int main()
{
    proba * first = new proba();
    proba * curr = first;
    const int size = 7;

    for(int i = 0; i < size; ++i)
    {
        getline(std::cin, curr->Name);
        if (i < size - 1)
        {
            curr->next = new proba();
            curr = curr->next;
        } else
            curr->next = 0;
    }
    return 0;
}

если я правильно понял вопрос..

Это сообщение отредактировал(а) azesmcar - 3.4.2010, 15:57
PM   Вверх
Killer_13
Дата 3.4.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Скорее всего правильно!
Никак немогу разобратся с "Связными списками". :(:(:(
Теперь хочу вывести на экран. Но наверное делаю че т фантастическое, так как мне высвечивает ошибку..
пробую вот так, и так.
Кусочек кода
Код

        } else
            curr->next = 0;
cout<<proba<<endl;
//или
cout<<proba.Name<<endl;
    }


Не идет, - прошу прощения за нубские вопросы. Хочу разобраться.
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

int main()
{
    proba * first = 0;
    proba * curr = first;
    const int size = 3;

    for(int i = 0; i < size; ++i)
    {
        if (i == 0)
        {
            first = curr = new proba();
        } else
        {
            curr->next = new proba();
            curr = curr->next;
        }
        getline(std::cin, curr->Name);
    }
    curr->next = 0;

    curr = first;
    while (curr != 0)
    {
        std::cout << curr->Name << std::endl;
        curr = curr->next;
    }
}

PM   Вверх
Rickert
Дата 3.4.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



proba - это имя вашей структуры, вам необходимо обращаться к элементам указателя. Вы совсем не понимаете C++ ?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Killer_13
Дата 3.4.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



пасиб, - работает, - залег разбираться, - всеравно нужно самому понять, иначе дело не пойдет. :(:(:(

Добавлено через 2 минуты и 7 секунд
Rickert - не совсем не понимаю - изучаю в этом семестре. Очень тяжело с указателями, - ну нкажется понятно все, теорию почитал, проделал элеметарные вещи, а как приходится задачку решать - так ступор.. :(:(:(
Буду сидеть, копать - пока не выкопаю.
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Killer_13 @  3.4.2010,  16:33 Найти цитируемый пост)
Очень тяжело с указателями

Как всегда smile 
PM   Вверх
Killer_13
Дата 3.4.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



и хочу учится программировать. Уже столько разных источников перечитал, столько разных книг перелопатил, и предыдущую мою тему учасники форума мне обьясняли как общатся с связаным списком, - а толку почти ноль. :(:(:( 
Ниче, - все получится.
Ео с этим че т никак не могу продвинутся, блиин, че без них не придумали программирование. smilesmilesmilesmile
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Killer_13

На самом деле все довольно просто (если понять суть), не хотелось бы писать лекцию на тему указателей, если есть что-то конкретное, чего ты не понимаешь я попробую объяснить, спрашивай конкретно. Начни с самого простого, напиши примитивные задачки с использованием указателей, поэкспериментируй, попробуй понять как они работают и что они дают, когда разберешься - тогда и переходи к спискам.
PM   Вверх
Killer_13
  Дата 3.4.2010, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



smile Лабораторную сдавать через 2 дня, - нужно разобраться, - времени не оч много, если учесть, что эти 2 ночи я работаю. :(

Ок, большое спасибо.

Сидел, - всячески эксперементировал над этой задачкой, - намного больше понял.
Но напрашиваются вопросы
1. В цыкле while где выводим элементы структуры, мы смотрим пока не нуль. curr у нас указатель, тоисть насколько я понимаю адрес, как мы можем сравнивать вот так?
2. В цыкле for Насколько я понимаю, мы записываем в память все значения, которые читаем, потом цыклом while вынимаем их из памяти.
3. С помощью єтого же указателя next мне нухно как то еще один цыкл записать, - потому, что я незнаю сколько структур всего создастся.. Тоисть я незнаю, сколько блоков данных будет в том файле который я читаю.
4. Не хочу создавать отдельную тему, но если нужно создам. Все бы намного прояснилось, если бы я видел адрес ячейки и данные которые находятся в этой ячейке. Пошуршал дебаггером в Code::Blocks - им я пользуюсь. Такого не обнаружыл. В окошке watches показівает только имя указателя и как изменяєтся адреса.. Насколько я читал. То оч мощьный DDD Debugger - если можно такое посмотреть с помощью этого дебаггера, то как его прикрутить к Code::Blocks? Если можно такое просмотреть с помощью инструментов Code::Blocks то как? Где почитать?

Спасибо!!! smile 
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Ну тогда начнем с самого начала.

Что такое указатель?
Что такое переменная мы знаем, это именованная область памяти, которая содержит некоторое значение определенного типа. Переменная занимает место в памяти, следовательно у нее есть адрес. Что такое указатель? Это обыкновенная переменная, которая содержит не значение, а адрес (точнее может содержать). NULL (он же 0) - это такое специальное значение, которое говорит о том, что адрес не присвоен.
Код

int * p = 0;
int * p = NULL; // тоже самое

нельзя написать
Код

int * p = 10;

но можно присвоить 0, так как это специальное значение. Это называется нулевой указатель. Нулевой указатель можно удалять без проверки.
Код

int * p = 0;
if (some_condition)
   p = new int();
delete p; // нет проблем


Что такое односвязный список?
Это структура (класс), которая содержит некое значение и знает о следующем элементе. Т.е. хранит значение и хранит адрес другой структуры. Но как понять где список заканчивается? Для этих целей служит метка окончания списка - NULL (он же 0). Т.е. дальше элементов нет. Мы создаем и заполняем список, а в конце ставим метку NULL. Мы проходим по всем объектам, пока не встретим метку и выводим все, что встретится на пути, пока список не закончится.
я не пользуюсь Code::Blocks, не знаю как он там показывает, но могу нарисовать. Сами адреса тебя не интересуют, обыкновенные числа, которые ни о чем не скажут.

Это сообщение отредактировал(а) azesmcar - 3.4.2010, 18:52

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  list.jpg 11,47 Kb
PM   Вверх
Killer_13
Дата 3.4.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Намного понятней. smile небо над указателями начинает светлеть. smilesmilesmile
Спасиб за рисунок, 
А вот такое представление дебаггинга я как могу посмотреть,? Может другие спецы подскажут? 
Прикрепляю рисунок, - что я имею введу..


Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  123.jpg 110,05 Kb
PM MAIL   Вверх
Killer_13
  Дата 3.4.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Почему же мне все таки нужно было, чтоб можно было достучатся до каждого элемента структуры.
Мне нужно выводить структуру в виде xml файла.
тоисть насколько я понимаю вот так..
Код


cout<<"<Name>"<<curr->Name<<"</Name>"<<endl;
cout<<"<Family>"<<curr->Family<<"</Family>"<<endl;
cout<<"<Jahr>"<<curr->Jahr<<"</Jahr>"<<endl;


Если учесть, что цыкл while выводит только через curr->Name, то такое сделать нельзя, как его сделать?

Какие же все таки хитрые задачки здесь придумывают..... smile
PM MAIL   Вверх
azesmcar
Дата 3.4.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Killer_13

Честно говоря не понял вопроса, что мешает именно так и написать?
Код

int main()
{
    proba * first = 0;
    proba * curr = first;
    const int size = 3;
    for(int i = 0; i < size; ++i)
    {
        if (i == 0)
        {
            first = curr = new proba();
        } else
        {
            curr->next = new proba();
            curr = curr->next;
        }
        getline(std::cin, curr->Name);
        getline(std::cin, curr->Family);
        std::cin >> curr->Jahr;
    }
    curr->next = 0;
    curr = first;
    while (curr != 0)
    {
        std::cout<<"<Name>"<<curr->Name<<"</Name>"<<std::endl;
        std::cout<<"<Family>"<<curr->Family<<"</Family>"<<std::endl;
        std::cout<<"<Jahr>"<<curr->Jahr<<"</Jahr>"<<std::endl;
        curr = curr->next;
    }
}


PM   Вверх
Killer_13
Дата 3.4.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Вместо этого

Код

        std::cout<<"<Family>"<<curr->Family<<"</Family>"<<std::endl;
        std::cout<<"<Jahr>"<<curr->Jahr<<"</Jahr>"<<std::endl;


Выводит пустые строки. :(
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.