Wyświetlanie tabeli z liczbami całkowitymi w odwrotnej kolejności.

0

Cześć, to mój "drugi raz" dzisiaj.
Napotkałem na bardzo nietypowy problem : nie mam BLADEGO pojęcia dlaczego program nie działa.


#include <stdio.h>

int main(void)
{
    int i, a, table[7];

    printf("Podaj 8 liczb calkowitych, kazda po enterze \n");
    for (i=0; i<=7; i++)
        scanf("%d", &table[i]);
    for (a=7; a>=0;a--)
        printf("%d ", table[a]);
    return 0;
}

Wpiszę 1, 2, 3, 4, 5, 6, 7, 8 to mi wyświetli 9,7,6,5,4,3,2,1 - dlaczego?
Jaki jest błąd w tym programie?
Dodam tylko, że początkowo nie było zmiennej a, tylko drugi raz użyta zmienna i - wypisywał wtedy 7,7,6,5,4,3,2,1

Już wiem jak zmusić go do działania. Starczy w całym kodzie zmienić table[7] na table[8]. Nie mam bladego pojęcia po co mi dodatkowa, ostatnia pusta komórka pamięci. Ktoś jest w stanie mi to rzeczowo wyjaśnić?

1

Wcale nie taki nietypowy ten problem, jak ci się wydaje :P

Kiedy piszesz:

int table[7];

Oznacza to (w uproszczeniu): "Zadeklaruj tablicę o 7-dmiu polach".
Widać, że wiesz już, że w C indeksujemy tablice od 0.

0: pierwsze pole
1: drugie pole
2: trzecie pole
...
6: siódme pole

Ot i cała tajemnica. Nie ma tu żadnych dodatkowych, pustych komórek pamięci.

0
#include <stdio.h>
 
int main(void)
{
    int i, a, table[8];
 
    printf("Podaj 8 liczb calkowitych, kazda po enterze \n");
    for (i=0; i<8; i++)
        scanf("%d", &table[i]);
    for (a=7; a>=0;a--)
        printf("%d ", table[a]);
    return 0;
}

W języku C tablice indeksuje się od zera :)

0

Czyli jak piszę table[7] tworzę komórki o adresach table[0]-table[6] (7-el), a nie table[0]-table[7] (8-el)?
Trochę w tym niekonsekwencji, tj sprzeczne z moją wewnętrzną logiką to jest, ale wielkie dzięki za wyjaśnienie problemu :)

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