Я попытался сделать более простой пример своей проблемы, надеюсь, код не выглядит слишком странно.Я пытаюсь составить отсортированный список.Если ввод для ex wrt
, er
, ff
, fr
, когда я пытаюсь напечатать список, он говорит fr fr fr fr
, и я не могу понять, почему.
К сожалению, яне могу опубликовать исходный код, struct tit
не имеет особого смысла в этом примере, но я не думаю, что это проблема.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct nodo *link;
typedef struct lista *TLIST;
typedef struct tit *TITOLO;
TLIST LISTinit();
link NEW(TITOLO val, link next);
void LISTinsert(TLIST l, TITOLO val);
void ListPrint(TLIST list);
TLIST caricaFile();
struct tit {
char nome[20];
};
struct lista {
link head;
int n;
};
struct nodo {
TITOLO val;
link next;
};
int main() {
TLIST lista;
lista = caricaFile();
ListPrint(lista);
return 0;
}
TLIST LISTinit() {
TLIST list = malloc(sizeof *list);
list->head = NULL;
list->n = 0;
return list;
}
link NEW(TITOLO val, link next) {
link x = malloc(sizeof *x);
x->next = next;
x->val = val;
return x;
}
void LISTinsert(TLIST l, TITOLO val) {
link x, p;
l->n++;
if (l->head == NULL || (strcmp(val->nome, l->head->val->nome) < 0)) {
l->head = NEW(val, l->head);
return;
}
for (x = l->head->next, p = l->head;
x != NULL && (strcmp(val->nome, x->val->nome) > 0);
p = x, x = x->next);
p->next = NEW(val, x);
}
void ListPrint(TLIST list) {
link x;
for (x = list->head; x != NULL; x = x->next)
printf("%s ", x->val->nome);
printf("\n");
}
TLIST caricaFile() {
TLIST list;
list = LISTinit();
TITOLO titolo = malloc(sizeof *titolo);
int i;
for (i = 0; i < 4; i++) {
printf("Insert title: ");
scanf("%s", titolo->nome);
LISTinsert(list, titolo);
}
return list;
}