[C] Lista jednokierunkowa

0

Cześć, próbuję napisać program, który odczytuje z pliku dane i zapisuje je do listy jednokierunkowej. Wydaje mi się, że wszystko do tej pory napisałem dobrze i powinno działać, ale jak wyświetlam listę to źle pokazuje wyrazy (char*).

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int MAX_SIZE = 100;

typedef struct czas{
int hour;
int min;
} czas;

typedef struct workday{
czas start;
czas koniec;
char* dzien;
char* grupa;
char* prowadzacy;
char* przedmiot;
int sala;
struct workday* next;
} workday;

void dodajDzien(workday** lista, char *str)
{
        workday* nastepny;
        nastepny = (workday*) malloc(sizeof(workday));    //utworz nowy element
        nastepny->start.hour = atoi(strtok(str, ":"));
        nastepny->start.min = atoi(strtok(NULL, "-"));
        nastepny->koniec.hour = atoi(strtok(NULL, ":"));
        nastepny->koniec.min = atoi(strtok(NULL, " "));
        nastepny->dzien = strtok(NULL, " ");
        nastepny->grupa = strtok(NULL, " ");
        nastepny->prowadzacy = strtok(NULL, " ");
        nastepny->przedmiot = strtok(NULL, " ");
        nastepny->sala = atoi(strtok(NULL, "\n"));

         if (*lista == NULL)    //jesli lista jest pusta
             nastepny->next = NULL;
         else           //jesli cos w niej jest
             nastepny->next = *lista;
         *lista = nastepny;
}

void wypiszListe(workday* lista){

    while(lista){
    printf("%d:%d-%d:%d %s %s %s %s %d\n", lista->start.hour, lista->start.min, lista->koniec.hour, lista->koniec.min,
            lista->dzien, lista->grupa, lista->prowadzacy, lista->przedmiot, lista->sala);
    lista = lista->next;
    }
}

int main()
{
    workday *lista = NULL;
    char str[MAX_SIZE];
    FILE *stream;
    stream = fopen("plik.txt", "r");
    fgets(str, MAX_SIZE, stream);
    while(!feof(stream)){
        dodajDzien(&lista, str);
        fgets(str, MAX_SIZE, stream);
        }
    wypiszListe(lista);
    fclose(stream);
    return 0;
}

Dane z pliku:

08:30-10:00 pt gr1 Kowalski Programowanie 526
07:23-19:34 cz gr1 Nowak Astronomia 4

Wypisuje:

7:23-19:34 cz gr1 Nowak Astronomia 4
8:30-10:0 cz gr1 Nowak ronomia 526

0

1) nie zwalniasz zaalokowanych zmiennych
2) niezdajesz sobie sprawy jak dziala funkcja strtok oraz wskazniki.... Tak wiec przypisanie do pol typu char * rezultatu z strtok nie zadziala poprawnie, jesli uzywasz tego samego bufora. Rozwiazaniem byloby skorzystanie z tablic miast wskaxnikow, albo alokowanie odpowiednio dlugich danych (ale tu znowu trzeba pamietac o zwolnieniu pamieci....

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