Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C - Wczytywanie liczb do tablicy i wyświetlanie od końca w C.

jaro1237 15 Cze 2013 17:09 1485 3
  • #1 15 Cze 2013 17:09
    jaro1237
    Poziom 1  

    Witam.
    Mam problem z programem w C.
    Polecenie jest takie:
    https://obrazki.elektroda.pl/6822503800_1371308729.jpg
    Mam coś napisane, ale nie chce chodzić za bardzo:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Proszę o pomoc.

    0 3
  • #2 15 Cze 2013 18:34
    rufek90
    Poziom 24  

    Nie kompilowałem tego, ale błąd jest pewnie w tym, że odnosisz się do elementu tablicy, który nie istnieje.

    Analizując twój kod na przykładzie...

    1. tworzę tablicę z n=3 elementami: tab[0], tab[1], tab[2]
    2. Zapisuję do tab[0], tab[1], tab[2] jakieś wartości
    3. Odczytuję wartości... pierwsza wartość, jaką chcę odczytać to tab[n], czyli tab[3]. Ups !


    Edit: dawno nie pisałem nic w C, ale chyba nie można tworzyć tablicy w ten sposób...

    0
  • #3 15 Cze 2013 20:03
    LED5W
    Poziom 32  

    Masz 2 błędy:
    Tworzysz tablicę o nieznanym rozmiarze (poprzez użycie niezainicjalizowanej zmiennej).
    Największy indeks tablicy tab to n-1 - patrz wyświetlanie zawartości tablicy.

    0
  • #4 16 Cze 2013 22:49
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    W języku C deklarować i inicjować tablice można tylko wtedy, gdy ich rozmiar jest znany na etapie kompilacji.
    Tutaj zadeklarowana została tablica double tab[n] o rozmiarze podanym w trakcie wykonywania programu a więc NIEZNANYM na etapie kompilacji.
    W takim przypadku należy postąpić inaczej:
    zadeklarować WSKAŹNIK do elementów typu (jakiś_typ) u Ciebie - double a następnie funkcją malloc lub calloc przydzielić pamięć np:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    po czym można się odwoływać do tab jak do normalnej tablicy, bo w języku C wskaźniki i tablice są ze sobą powiązane do tego stopnia że można traktować je zamiennie.

    Nie zapomnij tylko w trakcie kończenie działania programu czy funkcji zwolnić pamięć funkcją free!

    0