Wyświetlanie "śmieci" z tablicy dynamicznej

0

Cześć, na wstępie chcę powiedzieć, że dopiero uczę się programować, więc moje umiejętności są dość mierne :) Podczas pisania natrafiłem na następujący problem, z którym w żaden sposób nie mogę sobie poradzić. Utworzyłem tablicę dynamiczną do przechowywania struktur, wczytałem do niej dane z pliku, a następnie chcę wyświetlić je na ekranie i tutaj coś się psuje. Zamiast danych czasami wyświetlają się jakieś "śmieci", a czasami jest wszystko okej. Szukałem już informacji na ten temat, ale nic nie znalazłem. Ktoś ma jakiś pomysł na rozwiązanie tego?
title

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define IluZaw 5
#define N 20
int IleDru=0;
int IleMeczy=0;
typedef struct player{
    char imie[N];
    char nazwisko[N];
}player;
typedef struct team{
    char name[N];
    player zawodnik[IluZaw];
    struct team* next;
}druzyna;
typedef struct match{
    char data[N];
    druzyna druzynaA,druzynaB;
    char goleA[2],goleB[2];
    struct match* next;
}mecz;
druzyna* head;
mecz* head1;

void DodajzPlikuMecze(const char nazwa_pliku[],mecz tab[])
{
    FILE*plik;
    plik=fopen(nazwa_pliku,"r");
    if(plik==NULL)
    {
        printf("BLAD!");
        return;
    }
    int i=0;
    while(!feof(plik))
    {
        IleMeczy++;
        fscanf(plik,"%s %s %s %s %s",tab[i].data,tab[i].druzynaA.name,
               tab[i].goleA,tab[i].goleB,tab[i].druzynaB.name);
        printf("%s\n%s %s:%s %s\n",tab[i].data,tab[i].druzynaA.name,
               tab[i].goleA,tab[i].goleB,tab[i].druzynaB.name);
        i++;
    }
    fclose(plik);
    return;

int main()
{
    int licznik=0,licznik1=0,ch,ch1,i,j;
    char plik[N];
    head=NULL;
    head1=NULL;
    druzyna* tab=(druzyna*)malloc(sizeof(druzyna)*IleDru);
    mecz* tab1=(mecz*)malloc(sizeof(mecz)*IleMeczy);
    printf("Czy chcesz wczytac plik z meczami? \n(Pozniej nie bedzie takiej mozliwosci)\n1.Tak\n2.Nie\n");
    scanf("%d", &ch1);
    if(ch1==1)
        DodajzPlikuMecze("mecze.txt", tab1);
.
.
.
}

Plik tekstowy wygląda tak

01.01.2017 FC-Barcelona 3 2 Manchester-United
01.01.2017 Borussia-Dortmund 1 1 Real-Madryt

0

Udostępnij więcej kodu oraz plik z zapisanymi danymi. Zachmurzone niebo i ciężko mi czytać z gwiazd.

0

Już dodane.

1

Zwiększ

  #define N 20

do powiedzmy 50 i powinno nic złego się nie dziać dla tych podanych przez Ciebie wartości. Przepełniasz bufor w którym składujesz dane i dlatego masz takie dziwne działanie.

Jeżeli możesz korzystać z c++ i klasy std stringa to skorzystaj.
W innym wypadku pozostaje Ci bawić się z plikiem, ponieważ, możesz wczytać albo za mało danych, albo za dużo.
Tak na mój gust jak to ma być czysty C, to aby mieć pewność powinieneś wczytać cały plik do pamięci, a następnie szukać interesujących danych oraz je wycinać, sposobem, który sobie znajdziesz lub wymyslisz.
Lub gdy przewidujesz ze plik bedzie duzy to wczytywac go po czesci i to co wyzej.

0

Wielkie dzięki! Po zwiększeniu N, wszystko działa jak należy :)

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