Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Storry
0 / 0 / 1
Регистрация: 25.11.2014
Сообщений: 16
1

Связный список, объясните ошибки

05.04.2015, 13:34. Просмотров 871. Ответов 3
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#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;
}
Тут реализовано, заполнение и вывод связанного списка.
Я так понимаю, я не правильно обращаюсь к след элементу в выделенных строчках. Пожалуйста объясните как будет правильно.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2015, 13:34
Ответы с готовыми решениями:

Связный список. Необходимо создать новый связный список только из положительных элементов
Задача: Прочитать из файла связный список. Потом из этого списка создать еще один, в котором будут...

Связный список: вставить в список перед каждым вхождением элемента K элемент L
Разработать программу, которая создает список, элементами которого являются целые числа. ...

Запись в связный список из файла
Описание списков: typedef struct name { char first_name; char last_name; int...

Удалить связный список и освободить память
Вот так создаю связный список typedef struct { comp el; void* next; } list; list* first =...

Написать программу, которая реализует связный список
Написать программу, которая реализует связный список. Операции, которые должна выполнять программа:...

3
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
05.04.2015, 14:26 2
C
1
2
3
4
5
typedef struct FIRM 
{
    ...
    struct FIRM * next; /* <- тут было Firm */
} Firm_t, * list_t;
1
zer0mail
2503 / 2137 / 226
Регистрация: 03.07.2012
Сообщений: 7,731
Записей в блоге: 1
05.04.2015, 14:27 3
Лучший ответ Сообщение было отмечено Storry как решение

Решение

Попробуй так:
C
1
list_purge((Firm_t *)list->next);
0
Storry
0 / 0 / 1
Регистрация: 25.11.2014
Сообщений: 16
05.04.2015, 15:04  [ТС] 4
Благодарю
0
05.04.2015, 15:04
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2015, 15:04

Связный список и структуры: В процессе сортировки программа виснет
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; struct digit{char...

Написать функцию, которая добавляет новый элемент в связный список
Доброго времени суток, продолжаю изучать самостоятельно Си по книге Кочана Стефана &quot;Язык...

Инициализация, добавление и удаление элементов в СТЕКЕ через связный список
День добрый, нужна помощь со стеками. Передо мною стоит задача: 1) Инициализировать СТЕК через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru