Dodawanie elementów z pliku do listy

0

Witam
Chciałem napisać program który odczytuje słowa z pliku
PLIK :

mother	matka
father	ojciec
 

i słowa po ang wczytuje do listy 1 a po polsku do drugiej listy. Program skompilował się ale niestety gdy chce wypisać listy wyświetla się mi ciąg cyfr. Czy mógłby mi ktoś pomóc ?

typedef struct list{
	struct list *next,*prev;
	char key[30]; 
}lista;

void push(lista **head,char x[]){
	lista *nowy=(lista*)malloc(sizeof(lista));
	lista *tmp=(lista*)malloc(sizeof(lista));
	nowy->key == x;
	nowy->next = NULL;
		if(head) {
			tmp=head;
			while(tmp->next) tmp=tmp->next;
			tmp->next=nowy;
			nowy->prev = head;
			}
		else {
			head=nowy;
			tmp->prev=NULL;
		}
	
}

void show(lista *head){
	while(head) {
		printf("%d",head->key);
		head=head->next;
	}	
}

int main(void){
		FILE  *plik;
	int c;
	char z[2] = "";
	char podstawa[30] = "";
	lista *head1=NULL,*head2 = NULL;
	char k[30]= "";
	
	if ((plik=fopen("C:/test/test.txt", "r+"))==NULL) {
     printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
     exit(1);
     }
     
    while((c=fgetc(plik))!=EOF){
    	if ((c!='\t')&&(c!='\n')){
    		*z=c ;
    		strcat(podstawa,z);    		    	
       		}
    	else if (c=='\t'){
    	push(&head1,podstawa);
    	strcpy(podstawa,k);
    	}
		else if (c=='\n'){
			push(&head2,podstawa);
    			strcpy(podstawa,k);
			}
	
	}
show(head1); 
 show(head1); 
printf("%s",podstawa);

   	

return 0;	

} 
0

Tak bardzo, bardzo na szybko:

  1. Masz memleaka w funkcji push.
  2. Wczytuj cale słowo od razu, skoro chcesz dodawać słowa.
  3. Nie używaj niebezpiecznych funkcji (strcpy, strcat).
0

Czy musisz tak komplikować sobie życie?

while(fscanf(plik,"%29s","%29s",podstawa,k)==2) { push(&head1,podstawa); push(&head2,k); }

Zastanów się nad tym aby trzymać to jednak w jednej liście.

typedef struct list{
        struct list *next,*prev;
        char ang[30],pol[30]; 
}lista;

Uwaga! Lista dwukierunkowa nie jest najlepszym sposobem na trzymanie słownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1