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