Element listy zamiast tablicy C

Mam funkcję, która działa idealnie. Użytkownik wpisuje słowo i słowo kluczowe. W słowie kluczowym zamiast niektórych liter można go użyć „?” co oznacza dowolną literę losową, „*” oznacza dowolną liczbę liter na końcu i [x, y, z], co oznacza, że ​​litera może oznaczać x lub y lub z, a następnie funkcje sprawdzają, czy słowa pasują. Oto jak to wygląda:

int MatchWord(char *Word, char *Sequence)

{

int i = 0;
int j = 0; 
int k = 0;
int LastChar = 0;
int CharMatch = 0;
char SpecifiedChars[20];
while(Word[i]!='\0' && Sequence[j]!='\0')
{if(isalpha(Sequence[j]))
    {
        if(Word[i]!=Sequence[j])
        {return 0;}
        i++;
        j++;
    }

    if(Sequence[j] == '?')
    {
        i++;
        j++;
    }

    if(Sequence[j] == '[')

    {

        j++;
        while(Sequence[j]!= ']')

        {
            if(isalpha(Sequence[j]))
            {
                SpecifiedChars[LastChar] = Sequence[j];
                LastChar++;
                j++;
            }
            else
            {j++;}
        }
        j++;
        for(k = 0 ; k <= LastChar ;k++)
        {
            if(SpecifiedChars[k]==Word[i])
            {CharMatch = 1;}
            SpecifiedChars[k] = ' ';
        }
        SpecifiedChars[0] = '\0';
        LastChar = 0;
        if(!CharMatch)
        {return 0;}
        i++;
    }
    if(Sequence[j] == '*')
    {
        j++;
        while(Word[i]!='\0')
        {i++;}
    }
}
return 1;
}


int main()
{
char word[30], keyword[30];
printf("Type the word: \n");
scanf("%s",word);
printf("Type the key: \n");
scanf("%s",keyword);
if(MatchWord(word,keyword))
{
    printf("\nWords match");
}
else
{
    printf("\nWords don't match");
}
return 0;
   }

Ale muszę to zmienić, że zamiast pozwolić użytkownikowi na wpisanie pierwszego słowa, sprawdza słowa w bazie, które mam w pliku txt. Są w strukturze:

typedef struct bazaslowek                                
    {
        char *word1;
        char *category;
        struct bazaslowek* next;
    } baza;

I tak umieściłem je na liście, co również działa doskonale:

char word1[30];
char category[20];
FILE *fp;
if ((fp = fopen("bazaslow.txt", "r"))==NULL)
    {printf("Error!");
    exit(EXIT_FAILURE);}
else
    {
    while(!feof(fp))
        {
        fscanf(fp,"%s %s \n", word1, category);
        baza *wsk = *head;
        baza *new = malloc (sizeof(baza));
        new -> next = NULL;
        new -> word1 = strdup(word1);
        new -> category = strdup(category);
        if(wsk == NULL)
            {
            new -> next = *head;
            *head = new;
            }
        else
            {
            while(wsk -> next != NULL)
            wsk = wsk -> next;
            wsk -> next = new;
            }
        }
    }
fclose(fp);

Próbowałem umieścić wszystko w pętliwsk->next!=NULL sprawdza, czykeyword pasuje doword1, jeśli tak, drukuje go i sprawdza inne słowo, jeśli nie, po prostu przechodzi do innego słowa na liście bez printf. Niestety zawodzę tutaj, ponieważ zazwyczaj nie drukuje niczego lub drukuje wszystkie słowa, nie ma znaczenia, czy pasują, czy nie. Czy ktoś mógłby mi powiedzieć, jak powinien wyglądać?

questionAnswers(1)

yourAnswerToTheQuestion