Связный список, объясните ошибки - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include < string.h >
- #include <assert.h>
- typedef struct FIRM
- {
- char FIO[30];//ФИО сотрудника
- char DATE[10];
- char TIME_ARRIVAL[5];//время прихода
- char TIME_CARE[5];//время ухода
- struct Firm * next;
- } Firm_t, * list_t;
- int check_dates(char mass[10])//проверка ввода даты
- {
- int day, month, year;
- if(mass[2]!='.' || mass[5]!='.') // Проверяем корректность формата
- {
- puts(" The date is incorrect");
- return 0;
- }
- // Преобразуем строковые символы в числа
- day = atoi(mass);
- month = atoi(mass+3);
- year = atoi(mass+6);
- if((month==4 || month==6 || month==9 || month==11) && day>30) // если слишком много дней в коротком месяце
- {
- puts(" The day or month is incorrect");
- return 0;
- }
- if(month==2 && day>28) // отдельно проверяем месяц февраль
- {
- puts(" The day or month is incorrect");
- return 0;
- }
- if(day>31) // если введен слишком большой день
- {
- puts(" The day is incorrect");
- return 0;
- }
- if(month>12) // если введен слишком большой месяц
- {
- puts(" The month is incorrect");
- return 0;
- }
- return 1;
- };
- int check_time(char mass[5])//проверка ввода времени
- {
- int minute, hour;
- if(mass[2]!=':') // Проверяем корректность формата
- {
- puts(" The time is incorrect");
- return 0;
- }
- // Преобразуем строковые символы в числа
- hour = atoi(mass);
- minute = atoi(mass+3);
- if(minute>60) // если введен слишком большой день
- {
- puts(" The minute is incorrect");
- return 0;
- }
- if(hour>24) // если введен слишком большой месяц
- {
- puts(" The hour is incorrect");
- return 0;
- }
- return 1;
- };
- Firm_t * Firm_new(const char FIOn[30],const char DATEn[10],const char TIME_ARRIVALn[5],const char TIME_CAREn[5])
- {
- Firm_t * pFirm = malloc(sizeof(Firm_t));
- assert( pFirm );
- strcpy (pFirm->FIO, FIOn);
- strcpy (pFirm->DATE, DATEn);
- strcpy (pFirm->TIME_ARRIVAL, TIME_ARRIVALn);
- strcpy (pFirm->TIME_CARE, TIME_CAREn);
- pFirm->next = NULL;
- return pFirm;
- }
- int list_add(list_t * pList, Firm_t * pFirm)
- {
- return ( *pList && list_add(&((*pList)->next), pFirm) || ( *pList = pFirm ) );//main.c(98): error #2140: Type error in
- argument 1 to 'list_add'; expected 'list_t *' but found '(incomplete) struct Firm * *'.
- }
- void list_purge(list_t list)
- {
- if ( list )
- {
- list_purge(list->next);//main.c(105): error #2140: Type error in argument 1 to 'list_purge'; expected 'list_t'
- but found '(incomplete) struct Firm *'.
- free(list);
- }
- }
- void list_dump(list_t list)
- {
- if ( list )
- {
- printf("FIO: %s ", list->FIO);
- printf("DATE: %s ", list->DATE);
- printf("TIME ARRIVAL: %s ", list->TIME_ARRIVAL);
- printf("TIME CARE: %s ", list->TIME_CARE);
- list_dump(list->next);//main.c(118): error #2140: Type error in argument 1 to 'list_dump'; expected 'list_t'
- but found '(incomplete) struct Firm *'.
- }
- }
- int main(void)
- {
- char FIOc[30], DATEc[10], TIME_ARRIVALc[5], TIME_CAREc[5];
- list_t list = NULL;
- while(1)
- {
- printf("FIO: ");
- fgets(FIOc,30,stdin);
- if(strlen(FIOc)==1)
- break;
- while(1)
- {
- printf("date: ");
- scanf("%s", DATEc);
- if (check_dates(DATEc)==1)
- break;
- }
- while(1)
- {
- printf("time_arrival: ");
- scanf("%s", TIME_ARRIVALc);
- if (check_time(TIME_ARRIVALc)==1)
- break;
- }
- while(1)
- {
- printf("time_care: ");
- scanf("%s", TIME_CAREc);
- if (check_time(TIME_CAREc)==1)
- break;
- }
- list_add(&list, Firm_new(FIOc, DATEc, TIME_ARRIVALc, TIME_CAREc));
- }
- list_dump(list);
- list_purge(list);
- return 0;
- }
Решение задачи: «Связный список, объясните ошибки»
textual
Листинг программы
- list_purge((Firm_t *)list->next);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д