Почему не работает добавление в двусвязном списке? - 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 */
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д