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

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

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

У меня не работает функция добавления. Помогите найти ошибку. Программа запускается ввожу данные, и после того как введу последнее данное сразу выкидывает из программы. Тоесть функция ввода прорабатывает а добавление нет.Написать программу, обеспечивающую хранение информации, указанной в варианте, в виде двусторонне связанного списка и выполняющую следующие операции по манипулированию элементами списка: 1. добавление объекта в список; 2. удаление объектов из списка; 3. получение списка всех объектов; 4. обработка объектов по заданному в варианте критерию. Программа должна иметь следующую файловую структуру: 1. файл, содержащий объявления функций, реализующих требуемую в задании функциональность; 2. файл, содержащий описание этих функций; 3. головной файл, реализующий интерфейс пользователя. 7 Сведения о сдаче студентами сессии: • номер группы, • фамилия студента, • оценки по пяти экзаменам и пяти зачетам (“з” – зачет, “н” - незачет). Выдать на печать следующую информацию: • фамилии неуспевающих студентов с указанием номеров групп и количества задолженностей; • средний балл, полученный каждым студентом группы Х и всей группы в целом. мой код.(конкретно по добавлению)
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "list.h"
  4. int main()
  5. { int x;
  6. struct student S;
  7. int p;
  8. char c='y';
  9. while(c=='y'||c=='Y')
  10. {
  11.  
  12. system("cls");
  13. printf("1 Add new element\n");
  14. printf("2 Delete element\n");
  15. printf("3 View the list\n");
  16. printf("4 Print a list of underachieving students \n");
  17. printf("5 Calculate the average score\n");
  18. scanf("%d", &p);
  19. switch (p)
  20. {
  21. case 1: {
  22. Input();
  23. printf("Element added.\n");}
  24. break;
  25.  
  26. case 2: {
  27. printf("Input surname \n");
  28. scanf("%s", S.Name);
  29. getchar();
  30. del_obj(S.Name);
  31. printf("Deleted.\n"); }
  32. break;
  33. case 3:
  34. PrintList();
  35. break;
  36. case 4:
  37. PrintNames();
  38. break;
  39. case 5: {
  40. system("cls");
  41. printf("Input number group \n");
  42. scanf("%d", &x);
  43. getchar();
  44. PrintBall(x); }
  45. break;
  46. case 6:c='N';}
  47. if (c!='N'){printf("Continue? Yes(Y) or No(N)\n");
  48. scanf("%c",&c);}
  49. }
  50. }
  51.  
  52. #include <stdio.h>
  53. #include <stdlib.h>
  54. struct student
  55. {
  56. char *Name;
  57. int Group;
  58. int exam[3];
  59. char pass[3];
  60. };
  61. struct obj
  62. {
  63. struct student S;
  64. struct obj *next;
  65. struct obj *prev;
  66. };
  67. struct obj* add_obj(char* Name,int Group, int exam, char pass);
  68. struct obj* del_obj(char* Name);
  69. void PrintList();
  70. void Input();
  71. void PrintNames();
  72. void PrintBall(int X);
  73.  
  74. #include <stdio.h>
  75. #include <stdlib.h>
  76. #include "list.h"
  77. struct obj *head = NULL, *tail = NULL;
  78. struct obj* add_obj(char* Name,int Group, int exam, char pass)
  79. {
  80. int i;
  81. struct obj * current =(struct obj *)malloc(sizeof(struct obj));
  82. current->S.Name=Name;
  83. current->S.Group=Group;
  84. current-> S.exam[i]=exam;
  85. current->S.pass[i]=pass;
  86. current->prev = tail;
  87. current->next = NULL;
  88. if(tail != NULL) tail->next = current;
  89. if(head == NULL) head = current;
  90. tail = current;
  91. return current;
  92. }
  93. void Input() // ââîä Г*îâîãî ýëåìåГ*ГІГ* Г± ГЄГ«Г*ГўГЁГ*òóðû
  94. {
  95. struct student S ;
  96. int i;
  97. S.Name = 0;
  98. S.Group = 0;
  99. printf("Input Surname\n");
  100. S.Name = (char*)malloc(sizeof(char)* 20);
  101. scanf("%s", S.Name);
  102. getchar();
  103. printf("Input number group\n");
  104. scanf("%d", &(S.Group));
  105. getchar();
  106. for (i = 0; i < 3; i++)
  107. {
  108. printf("Input the estimate for %d exam\n", i+1);
  109. scanf("%d", &(S.exam[i]));
  110. getchar();
  111. }
  112. for (i = 0; i < 3; i++)
  113. {
  114. printf("Input the estimate for %d setoff\n", i+1);
  115. scanf("%s", &(S.pass[i]));
  116. getchar();
  117. }
  118. add_obj(S.Name,S.Group,S.exam, S.pass);
  119. }

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

textual
Листинг программы
  1. /*
  2.  *  dllist.h
  3.  *  
  4.  *  Double Linked List header file
  5.  *
  6.  */
  7.  
  8. #ifndef DLLIST_H
  9. #define DLLIST_H 1
  10.  
  11. typedef struct DLLIST dllist_t;
  12.  
  13. typedef void * (*data_constructor_t)(const void *);
  14. typedef void (*data_destructor_t)(void *);
  15. typedef int (*data_comparator_t)(const void *, const void *);
  16. typedef void (*data_proc_t)(void *, void *);
  17.  
  18. extern dllist_t * dllist_new(data_constructor_t, data_destructor_t);
  19. extern void dllist_free(dllist_t *);
  20. extern int dllist_add(dllist_t *, const void *);
  21. extern void * dllist_find(dllist_t *, const void *, data_comparator_t);
  22. extern int dllist_remove(dllist_t *, const void *, data_comparator_t);
  23. extern void dllist_foreach(dllist_t *, void *, data_proc_t);
  24.  
  25. #endif /* DLLIST_H */

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


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

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

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы