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