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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с задачей 
:(
    Опции темы
rujmaster
Дата 30.4.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дана задача. Разработать двусвязный список, функцию добавления элемента в начало и ф-ию удаления любого элемента из списка. С удалением, как я понял, нужно рассмотреть 3 случая: элемент в начале, в конце и где-то в списке). Для демонстрации всех 3 случаев решил сделать возможность вводить самому нужную строку для удаления.
Код


#include <stdio.h>
#include <stdlib.h>
struct group {
        int nacelenie;
        char punkt[25];
        struct group * next;
        struct group * prev;
    };

    struct group *a;
    struct group *b;
    struct group *c;
    struct group *head = NULL;
    struct group *tmp;
    int i, tmp1=0;
    char tmp2[20];


struct group * insertHead(struct group* head_ptr,struct group* tmp_ptr){
    if (head_ptr==NULL && tmp_ptr!=NULL)
        return tmp_ptr;
    head_ptr->prev=tmp_ptr;
    tmp_ptr->next=head_ptr;
    return tmp_ptr;
}


struct group * del (struct group * str) {
    if (str->prev==NULL) {
        head=str->next;
        str->next=NULL;
        head->prev=NULL;
        free (str);
    }
    else {
        if (str->next==NULL) {
            c=str->prev; 
            str->prev=NULL;
            c->next=NULL;
            free (str);
        }
        else {
            a=str->prev;
            b=str->next;
            b->prev=str->prev;
            a->next=str->next;
            str->next=str->prev=NULL;
            free (str);
        }
    }
    return str;
}









int main() {
    
    
    
    for(i=0;i<5; i++){
        tmp = (struct group*) malloc(sizeof(struct group));
        scanf("%d %s", &tmp->nacelenie, tmp->punkt);
        tmp->next=tmp->prev=NULL;
        head = insertHead(head,tmp);
    }
    tmp=head;
    printf("\n");


    while (tmp!=NULL){
        printf("%d %s\n", tmp->nacelenie, tmp->punkt);
        tmp=tmp->next;
    } 
    tmp=head;

    printf ("\n");

    scanf ("%d %s", &tmp1, &tmp2);
    while (tmp!=NULL) {
    if (tmp1==tmp->nacelenie && tmp2==tmp->punkt) {
        break;
    } 
    tmp=tmp->next;
    }
    del (tmp);

    
    
    


    


    tmp=head;
    printf("\n");
    printf("\n");
    while (tmp!=NULL){
        printf("%d %s\n", tmp->nacelenie, tmp->punkt);
        tmp=tmp->next;
    } 
    
    return 0;
}
 

Программа вываливается с ошибкой.  Проблема где-то тут:
Код

scanf ("%d %s", &tmp1, &tmp2);
    while (tmp!=NULL) {
    if (tmp1==tmp->nacelenie && tmp2==tmp->punkt) {
        break;
    } 
    tmp=tmp->next;
    }
    del (tmp);

ибо сама функция работает нормально. Помогите разобраться smile
PM MAIL   Вверх
bsa
Дата 1.5.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



для начала вспомни, как надо сравнивать строки.
PM   Вверх
stat007
Дата 2.5.2009, 12:03 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -4



это легко делается с помощью функции erase().
PM MAIL   Вверх
zim22
Дата 2.5.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(stat007 @  2.5.2009,  12:03 Найти цитируемый пост)
это легко делается с помощью функции erase().

и где же вы увидели функцию erase в коде rujmaster?


--------------------
PM MAIL   Вверх
andrew_121
Дата 2.5.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(zim22 @  2.5.2009,  14:37 Найти цитируемый пост)
и где же вы увидели функцию erase в коде rujmaster? 

И я не нашел... smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 2.5.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(bsa @  1.5.2009,  18:24 Найти цитируемый пост)
для начала вспомни, как надо сравнивать строки. 


Цитата(stat007 @  2.5.2009,  12:03 Найти цитируемый пост)
это легко делается с помощью функции erase(). 

 smile  smile  smile 
PM   Вверх
bsa
Дата 2.5.2009, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



azesmcar, да да. меня тоже порадовало
PM   Вверх
azesmcar
Дата 2.5.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



rujmaster

Такого вида сравнения заменить на strcmp
Код

tmp1==tmp->nacelenie 

А вылетает конкретно тут
Код

del (tmp);

после
Код

tmp=tmp->next;

в переменной tmp оказывается значение 0 (NULL) и функция del вылетает.
видимо ошибка в логике, проверьте логику работы программы
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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