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

Wyświetlanie tabeli z liczbami całkowitymi w odwrotnej kolejności.
X1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 28
0

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

Kopiuj

#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ć?

aurel
  • Rejestracja: dni
  • Ostatnio: dni
1

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

Kiedy piszesz:

Kopiuj
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.

0D
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0
Kopiuj
#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 :)

X1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 28
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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.