Связный список, объясните ошибки - C (СИ)

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

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

Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include < string.h >
  4. #include <assert.h>
  5. typedef struct FIRM
  6. {
  7. char FIO[30];//ФИО сотрудника
  8. char DATE[10];
  9. char TIME_ARRIVAL[5];//время прихода
  10. char TIME_CARE[5];//время ухода
  11. struct Firm * next;
  12. } Firm_t, * list_t;
  13. int check_dates(char mass[10])//проверка ввода даты
  14. {
  15. int day, month, year;
  16. if(mass[2]!='.' || mass[5]!='.') // Проверяем корректность формата
  17. {
  18. puts(" The date is incorrect");
  19. return 0;
  20. }
  21. // Преобразуем строковые символы в числа
  22. day = atoi(mass);
  23. month = atoi(mass+3);
  24. year = atoi(mass+6);
  25. if((month==4 || month==6 || month==9 || month==11) && day>30) // если слишком много дней в коротком месяце
  26. {
  27. puts(" The day or month is incorrect");
  28. return 0;
  29. }
  30. if(month==2 && day>28) // отдельно проверяем месяц февраль
  31. {
  32. puts(" The day or month is incorrect");
  33. return 0;
  34. }
  35. if(day>31) // если введен слишком большой день
  36. {
  37. puts(" The day is incorrect");
  38. return 0;
  39. }
  40. if(month>12) // если введен слишком большой месяц
  41. {
  42. puts(" The month is incorrect");
  43. return 0;
  44. }
  45. return 1;
  46. };
  47. int check_time(char mass[5])//проверка ввода времени
  48. {
  49. int minute, hour;
  50. if(mass[2]!=':') // Проверяем корректность формата
  51. {
  52. puts(" The time is incorrect");
  53. return 0;
  54. }
  55. // Преобразуем строковые символы в числа
  56. hour = atoi(mass);
  57. minute = atoi(mass+3);
  58. if(minute>60) // если введен слишком большой день
  59. {
  60. puts(" The minute is incorrect");
  61. return 0;
  62. }
  63. if(hour>24) // если введен слишком большой месяц
  64. {
  65. puts(" The hour is incorrect");
  66. return 0;
  67. }
  68. return 1;
  69. };
  70. Firm_t * Firm_new(const char FIOn[30],const char DATEn[10],const char TIME_ARRIVALn[5],const char TIME_CAREn[5])
  71. {
  72. Firm_t * pFirm = malloc(sizeof(Firm_t));
  73. assert( pFirm );
  74. strcpy (pFirm->FIO, FIOn);
  75. strcpy (pFirm->DATE, DATEn);
  76. strcpy (pFirm->TIME_ARRIVAL, TIME_ARRIVALn);
  77. strcpy (pFirm->TIME_CARE, TIME_CAREn);
  78. pFirm->next = NULL;
  79. return pFirm;
  80. }
  81. int list_add(list_t * pList, Firm_t * pFirm)
  82. {
  83. return ( *pList && list_add(&((*pList)->next), pFirm) || ( *pList = pFirm ) );//main.c(98): error #2140: Type error in
  84. argument 1 to 'list_add'; expected 'list_t *' but found '(incomplete) struct Firm * *'.
  85. }
  86. void list_purge(list_t list)
  87. {
  88. if ( list )
  89. {
  90. list_purge(list->next);//main.c(105): error #2140: Type error in argument 1 to 'list_purge'; expected 'list_t'
  91. but found '(incomplete) struct Firm *'.
  92. free(list);
  93. }
  94. }
  95. void list_dump(list_t list)
  96. {
  97. if ( list )
  98. {
  99. printf("FIO: %s ", list->FIO);
  100. printf("DATE: %s ", list->DATE);
  101. printf("TIME ARRIVAL: %s ", list->TIME_ARRIVAL);
  102. printf("TIME CARE: %s ", list->TIME_CARE);
  103. list_dump(list->next);//main.c(118): error #2140: Type error in argument 1 to 'list_dump'; expected 'list_t'
  104. but found '(incomplete) struct Firm *'.
  105. }
  106. }
  107. int main(void)
  108. {
  109. char FIOc[30], DATEc[10], TIME_ARRIVALc[5], TIME_CAREc[5];
  110. list_t list = NULL;
  111. while(1)
  112. {
  113. printf("FIO: ");
  114. fgets(FIOc,30,stdin);
  115. if(strlen(FIOc)==1)
  116. break;
  117. while(1)
  118. {
  119. printf("date: ");
  120. scanf("%s", DATEc);
  121. if (check_dates(DATEc)==1)
  122. break;
  123. }
  124. while(1)
  125. {
  126. printf("time_arrival: ");
  127. scanf("%s", TIME_ARRIVALc);
  128. if (check_time(TIME_ARRIVALc)==1)
  129. break;
  130. }
  131. while(1)
  132. {
  133. printf("time_care: ");
  134. scanf("%s", TIME_CAREc);
  135. if (check_time(TIME_CAREc)==1)
  136. break;
  137. }
  138. list_add(&list, Firm_new(FIOc, DATEc, TIME_ARRIVALc, TIME_CAREc));
  139. }
  140. list_dump(list);
  141. list_purge(list);
  142. return 0;
  143. }
Тут реализовано, заполнение и вывод связанного списка. Я так понимаю, я не правильно обращаюсь к след элементу в выделенных строчках. Пожалуйста объясните как будет правильно.

Решение задачи: «Связный список, объясните ошибки»

textual
Листинг программы
  1. list_purge((Firm_t *)list->next);

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


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

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

15   голосов , оценка 3.867 из 5

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

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

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