Почему не выводит/не заполняет список?
Добрый день! Начал учить списки на 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