Почему не выводит/не заполняет список?

Добрый день! Начал учить списки на C, но возникли некоторые трудности.

Мне необходимо прочитать строку из файла и записать значения в список(без делителей).

При запуске: компилятор не выдаёт ошибок, а сама программа ничего не выводит. Поэтому трудно разобраться в чём проблема.

Сам код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 1024
#define DEL " .,:;\n\t!?"
typedef struct ELT
{
    char *data;
    struct ELT *next;
}ELT;

void Createhead(ELT **phead, ELT **plast)
{
    *phead = (ELT*)malloc(sizeof(ELT));
    (*phead) -> next = NULL;
    *plast = *phead;
}

int Does_T(char a)
{
    while (a)
    {
        if (a % 10 == 5)
            return 1;
        a /= 10;
    }
    return 0;
}

void Add(ELT **last, char* a)
{
    ELT *q;
    q = (ELT*)malloc(sizeof(ELT));
    q->data = a;
    q->next = NULL;
    (*last)->next = q;
    *last = q;
}

int ReadFile(char* fname, ELT **last)
{
    FILE *f;
    char s[N], *word;
    int i, j, k,size, flag[256] = { 0 };
    if((f = fopen(fname,"r")) == NULL)
        return 1;
    for (i = 0; DEL[i]; i++)
        flag[DEL[i]] = 1;
    while (fgets(s, N, f) != NULL)
    {
        for (i = 0; s[i] && flag[s[i]]; i++)
            ;
        while (s[i])
        {
            word = s + i;
            while (s[i] && !flag[s[i]])
                i++;
            j = i;
            while (s[i] && flag[s[i]])
                i++;
            s[j] = '\0';
            Add(last, strdup(word));
        }

    }
    fclose(f);
    return 0;
}

void Del(ELT **last, ELT *head)
{
    ELT *q, *buf;
    q = head;
    while(q->next != NULL)
    {
        if(Does_T(*(q->next->data)))
        {
            buf = q->next;
            q->next = buf->next;
            free(buf);
        }
        else q = q -> next;
    }
    *last = q;
}

void Print(ELT *head)
{
    ELT *q;
    for(q = head -> next; q != NULL; q = q->next)
        printf("%d->",q->data);
}

void Distruct(ELT *head, ELT **last)
{
    ELT *q, *buf;
    q = head -> next;
    while(q != NULL)
    {
        buf = q;
        q = q->next;
        free(buf);
    }
    head ->next = NULL;
    *last = head;
}

int main()
{
    ELT *head, *last;
    Createhead(&head, &last);
    ReadFile("file1.txt", &last);
    Print(head);
    Del(&last, head);
    Print(head);
    Distruct(head, &last);
    Print(head);
    free(head);
    return 0;
}

Файл file1.txt содержит строку: 1 23 456


Ответы (0 шт):