Почему не работает добавление в двусвязном списке? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

У меня не работает функция добавления. Помогите найти ошибку. Программа запускается ввожу данные, и после того как введу последнее данное сразу выкидывает из программы. Тоесть функция ввода прорабатывает а добавление нет.Написать программу, обеспечивающую хранение информации, указанной в варианте, в виде двусторонне связанного списка и выполняющую следующие операции по манипулированию элементами списка: 1. добавление объекта в список; 2. удаление объектов из списка; 3. получение списка всех объектов; 4. обработка объектов по заданному в варианте критерию. Программа должна иметь следующую файловую структуру: 1. файл, содержащий объявления функций, реализующих требуемую в задании функциональность; 2. файл, содержащий описание этих функций; 3. головной файл, реализующий интерфейс пользователя. 7 Сведения о сдаче студентами сессии: • номер группы, • фамилия студента, • оценки по пяти экзаменам и пяти зачетам (“з” – зачет, “н” - незачет). Выдать на печать следующую информацию: • фамилии неуспевающих студентов с указанием номеров групп и количества задолженностей; • средний балл, полученный каждым студентом группы Х и всей группы в целом. мой код.(конкретно по добавлению)
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
 
int main()
{       int x;
        struct  student S;
        int p;
        char c='y';
        while(c=='y'||c=='Y')
        {

        system("cls");
        
        printf("1 Add new element\n");
        printf("2 Delete element\n");
        printf("3 View the list\n");
        printf("4 Print a list of underachieving students \n");
        printf("5 Calculate the average score\n");
        scanf("%d", &p);
        switch (p)
        {
        case 1: {
            Input();
            printf("Element added.\n");}
            break;

        case 2: {
    
        printf("Input surname \n");
        scanf("%s", S.Name);
        getchar();
        del_obj(S.Name);
        printf("Deleted.\n"); }
        break;
                
        case 3:
        PrintList();
        break;
        
        case 4:
            PrintNames();
            break;
            
        case 5: {
                system("cls");
                printf("Input number group \n");
                scanf("%d", &x);
                getchar();
                PrintBall(x); }     
            break;
            case 6:c='N';}
            if (c!='N'){printf("Continue? Yes(Y) or No(N)\n");
            scanf("%c",&c);}
            }
        
        }

#include <stdio.h>
#include <stdlib.h>
struct student
{
    char *Name;
    int Group;
    int exam[3];
    char pass[3];
};
 
struct obj
{
    struct student S;
    struct obj *next;
    struct obj *prev;
};
struct obj* add_obj(char* Name,int Group, int exam, char pass);
struct obj* del_obj(char* Name); 
void PrintList();
void Input();
void PrintNames();
void PrintBall(int X);

#include <stdio.h>
#include <stdlib.h>
#include "list.h"
 
struct obj *head = NULL, *tail = NULL;
 
struct obj* add_obj(char* Name,int Group,  int exam, char pass) 
{ 
int i;
struct obj * current =(struct obj *)malloc(sizeof(struct obj)); 
current->S.Name=Name;
current->S.Group=Group;
current-> S.exam[i]=exam;
current->S.pass[i]=pass;
current->prev = tail; 
current->next = NULL; 
if(tail != NULL) tail->next = current; 
if(head == NULL) head = current; 
tail = current; 
return current; 
} 
void Input() // ââîä Г*îâîãî ýëåìåГ*ГІГ* Г± ГЄГ«Г*ГўГЁГ*òóðû
{
    
    struct  student S ;
    int i;
    S.Name = 0;
    S.Group = 0;
    printf("Input Surname\n");
    S.Name = (char*)malloc(sizeof(char)* 20);
    scanf("%s", S.Name);
    getchar();
    printf("Input number group\n");
    scanf("%d", &(S.Group));
    getchar();
    for (i = 0; i < 3; i++)
    {
        printf("Input the estimate for %d exam\n", i+1);
        scanf("%d", &(S.exam[i]));
        getchar();
    }
    for (i = 0; i < 3; i++)
    {
        printf("Input the estimate for %d setoff\n", i+1);
        scanf("%s", &(S.pass[i]));
        getchar();
    }
    add_obj(S.Name,S.Group,S.exam, S.pass);
}

Решение задачи: «Почему не работает добавление в двусвязном списке?»

textual
Листинг программы
/*
 *  dllist.h
 *  
 *  Double Linked List header file
 *
 */
 
#ifndef DLLIST_H
#define DLLIST_H 1
 
typedef struct DLLIST dllist_t;
 
typedef void * (*data_constructor_t)(const void *);
typedef void (*data_destructor_t)(void *);
typedef int (*data_comparator_t)(const void *, const void *);
typedef void (*data_proc_t)(void *, void *);
 
extern dllist_t * dllist_new(data_constructor_t, data_destructor_t);
extern void dllist_free(dllist_t *);
extern int dllist_add(dllist_t *, const void *);
extern void * dllist_find(dllist_t *, const void *, data_comparator_t);
extern int dllist_remove(dllist_t *, const void *, data_comparator_t);
extern void dllist_foreach(dllist_t *, void *, data_proc_t);
 
#endif /* DLLIST_H */

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы