Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2014, 02:16   #1
samsandr
 
Регистрация: 26.11.2013
Сообщений: 8
По умолчанию Удаление элемента по названию из односвязного списка

Не получается сделать функцию deleting- Удаление по названию из односвязного списка. У меня есть структура данных, я заполняю её через функцию first_look() и хочу удалить какой-то элемент по названию. Подскажите что не правильно.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


    struct studying{
        char name[10];
        char address[10];
        char language[10];
        int listeners;
        int price;
        int time_of_stud;
    };

    struct List {
        struct studying el;
        struct List *next;
    };
    FILE *study;
    int n=0;

void first_look(){   
    struct List *start=NULL;
    struct List *p_del;
    int i=0;
    start=malloc(sizeof(struct List));
     struct List *finish=start;

    study=fopen("learning","ab");
    if(study == NULL) {
        printf("ERROR");
        exit(0);
    }

    else {
        printf("How many are courses?: ");
        scanf("%d", &n);
        for( ; i < n ; i++) {  //ввод даних
            finish->next=malloc(sizeof(struct List));
            puts("");
            printf("Enter a name of courses: ");
            scanf("%s", finish->el.name);


            printf("Enter an address of the courses: ");
            scanf("%s", finish->el.address);

            printf("Enter a foreign language of the courses: ");
            scanf("%s",finish->el.language);

            printf("Enter a number of listeners of the courses: ");
            scanf("%d",&finish->el.listeners);

            printf("Enter a price of the courses: ");
            scanf("%d",&finish->el.price);

            printf("Enter a period of the courses: ");
            scanf("%d",&finish->el.time_of_stud);
            fwrite(&finish->el, sizeof(struct studying), 1, study);
            finish=finish->next;
            finish->next=NULL;
        }
            //free(finish);
    }


    fclose(study);
finish=start;
while(finish){
           p_del=finish;
           finish=finish->next;
           free(p_del);

    }
}

void deleting() { 
    char name_del[15];
    struct List *start=NULL, *tmp;
    start=malloc(sizeof(struct List));
    struct List *del=start, *prev=NULL;
    struct List *p_del, *p_del1;
    study=fopen("learning","wb");
    if(study == NULL) {
        printf("ERROR");
        exit(0);
    }
    else {
        printf("\nEnter a name of a courses that you want to delete: ");
        scanf("%s",name_del);
        while(del)
    {
        del=malloc(sizeof(struct List));
        prev=malloc(sizeof(struct List));
        fread(&del->el, sizeof(struct studying), 1, study);
        if(!strcmp(name_del, del->el.name))
        {
            if(start)
            {
                tmp=start;
                start = start->next;
                free(tmp);
            }
            else
            {
                start = del->next;
                tmp=del->next;
                free(del);
                del=tmp;
            }
            puts("Element is deleted successfully");

        }
        else
        {
            start = del;
            del = del->next;
        }
        fwrite(&del->el, sizeof(struct studying), 1, study);
    }
       }

    fclose(study);
    del=start;
    while(del){
           p_del=del;
           del=del->next;
           free(p_del);

    }



}
int main()
{
    int operations=0;
    puts("| Please, write a number of the operation that you want to make               |");
    puts("| 1-write an information about a courses                                      |");
    puts("| 2-remove a given element (by name)                                          |");
  
    while(operations!=666) {
        printf("\nEnter a number of operation: ");
        scanf("%d", &operations);
        switch(operations) {
            case 1: first_look(); break;  
            case 2: deleting(); break;  
            
        }
    }
    return 0;
}
samsandr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ удаление элемента списка NinjaNoob Помощь студентам 1 28.01.2013 04:01
удаление элемента односвязного списка. язык СИ. всего 5 строчек кода, много времени не займет. MisterTreb Помощь студентам 0 08.01.2013 15:17
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02