Tablice struktur

0

Witam
Piszę program który m.in obsługuje daty. Stworzyłem własną strukturę typu data przechowująca 3 liczby int bez znaku, opisujące datę.
W programie tworzę 2 tablice struktur wymienionego typu. W tych tablicach przechowuję po 12 dat pewnych okresów muszą one być "na sztywno" wpisane do programu. Do pierwszej tablicy odwołuję się przez zmienną typu int w pętli while. Wszystko jest dobrze do pewnego momentu. Kiedy wartość licznika przyjmie zero program odczytuje nie wartość pierwszej tablicy o indeksie zero a wartość drugiej tablicy o indeksie 12. Bardzo proszę o pomoc. Załączam kod źródłowy.

 
 
        int i;
        int j;
        struct Data TablicaOkresowOd[12];
        struct Data TablicaOkresowDo[12];
 
        TablicaOkresowOd[0].rok=1997;
        TablicaOkresowOd[0].miesiac=1;
        TablicaOkresowOd[0].dzien=1;
 
        TablicaOkresowOd[1].rok=1998;
        TablicaOkresowOd[1].miesiac=4;
        TablicaOkresowOd[1].dzien=15;
 
        TablicaOkresowOd[2].rok=1999;
        TablicaOkresowOd[2].miesiac=2;
        TablicaOkresowOd[2].dzien=1;
 
        TablicaOkresowOd[3].rok=1999;
        TablicaOkresowOd[3].miesiac=5;
        TablicaOkresowOd[3].dzien=15;
 
        TablicaOkresowOd[4].rok=2000;
        TablicaOkresowOd[4].miesiac=11;
        TablicaOkresowOd[4].dzien=1;
 
        TablicaOkresowOd[5].rok=2001;
        TablicaOkresowOd[5].miesiac=12;
        TablicaOkresowOd[5].dzien=15;
 
        TablicaOkresowOd[6].rok=2002;
        TablicaOkresowOd[6].miesiac=7;
        TablicaOkresowOd[6].dzien=25;
 
        TablicaOkresowOd[7].rok=2003;
        TablicaOkresowOd[7].miesiac=2;
        TablicaOkresowOd[7].dzien=1;
 
        TablicaOkresowOd[8].rok=2003;
        TablicaOkresowOd[8].miesiac=9;
        TablicaOkresowOd[8].dzien=25;
 
        TablicaOkresowOd[9].rok=2005;
        TablicaOkresowOd[9].miesiac=1;
        TablicaOkresowOd[9].dzien=10;
 
        TablicaOkresowOd[10].rok=2005;
        TablicaOkresowOd[10].miesiac=10;
        TablicaOkresowOd[10].dzien=15;
 
        TablicaOkresowOd[11].rok=2008;
        TablicaOkresowOd[11].miesiac=12;
        TablicaOkresowOd[11].dzien=15;
 
        TablicaOkresowOd[12].rok=2014;
        TablicaOkresowOd[12].miesiac=12;
        TablicaOkresowOd[12].dzien=23;
 
	TablicaOkresowDo[0].rok=1998;
        TablicaOkresowDo[0].miesiac=4;
        TablicaOkresowDo[0].dzien=14;
 
        TablicaOkresowDo[1].rok=1999;
        TablicaOkresowDo[1].miesiac=1;
        TablicaOkresowDo[1].dzien=31;
 
        TablicaOkresowDo[2].rok=1999;
        TablicaOkresowDo[2].miesiac=5;
        TablicaOkresowDo[2].dzien=14;
 
        TablicaOkresowDo[3].rok=2000;
        TablicaOkresowDo[3].miesiac=10;
        TablicaOkresowDo[3].dzien=31;
 
        TablicaOkresowDo[4].rok=2001;
        TablicaOkresowDo[4].miesiac=12;
        TablicaOkresowDo[4].dzien=14;
 
        TablicaOkresowDo[5].rok=2002;
        TablicaOkresowDo[5].miesiac=7;
        TablicaOkresowDo[5].dzien=24;
 
        TablicaOkresowDo[6].rok=2003;
        TablicaOkresowDo[6].miesiac=1;
        TablicaOkresowDo[6].dzien=31;
 
        TablicaOkresowDo[7].rok=2003;
        TablicaOkresowDo[7].miesiac=9;
        TablicaOkresowDo[7].dzien=24;
 
        TablicaOkresowDo[8].rok=2005;
        TablicaOkresowDo[8].miesiac=1;
        TablicaOkresowDo[8].dzien=9;
 
        TablicaOkresowDo[9].rok=2005;
        TablicaOkresowDo[9].miesiac=10;
        TablicaOkresowDo[9].dzien=14;
 
        TablicaOkresowDo[10].rok=2008;
        TablicaOkresowDo[10].miesiac=12;
        TablicaOkresowDo[10].dzien=14;
 
        TablicaOkresowDo[11].rok=2014;
        TablicaOkresowDo[11].miesiac=12;
        TablicaOkresowDo[11].dzien=22;
 
        TablicaOkresowDo[12].rok=2015;
        TablicaOkresowDo[12].miesiac=4;
        TablicaOkresowDo[12].dzien=5;
 
        i=12;
        while(CzyDataJestWczesniejsza(TablicaOkresowOd[i],TerminZaplaty)==-1) 
          --i;             
        /*funkcja CzyDataJestWczesniejsza sprawdza czy data
         podana jako pierwszy argument jest wczesniejsza niż data podana jako drugi argument jeśli nie to zwróć -1*. W tym miejscu występuje błąd programu. Kiedy indeks i wynosi zero TablicaOkresowOd[0] przybiera wartosc TablicaOkresowDo[12]/
0

Może zacznijmy od tego, że jak masz tablicę t[12] to indeksy w niej są z zakresu 0-11, a nie 0-12.

0

Mam nadzieję że to rozwiąże problem. Dziękuję

0

Nie wiem, jak testowałem na ideone tą wersję to dla indeksu 0 wyświetlało tak jak powinno.

0

Możesz poprawić składnię na nieco bardziej przyjazną...
I pamiętaj... nie rób tego jako globalne bo nawet w przykładach możesz liczyć na ocenę że zawsze tak robisz :-> Eh...

typedef struct {
    unsigned rok;
    unsigned miesiac;
    unsigned dzien;
} Data;

const Data TablicaOkresowOd[] = {
    {1997, 1, 1 },
    {1998, 4, 15},
    {1999, 2, 1},
    // ...
};

const Data TablicaOkresowDo[] = {
    {1998, 4, 14},
    {1999, 1, 31},
    {1999, 5, 14},
    // ...
};

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