Tablica dwuelementowa

0

Dopiero uczę się C, zacząłem sobie ogarniać jakieś zadania itd.
A więc chce żeby program zapytał mnie o ilość wierszy i kolumn macierzy, a następnie wpisuje jakąś wartość w dane pole tej tablicy. Napisałem to jak poniżej i zastanawiam się co jest źle. Dla ułatwienia przyjmuje że cały czas robię macierz 3x3 (3 wiersze i 3 kolumny), a problem jest taki że program dla tab[0][2] przyjmuje tą samą wartość co dla tab[1][0] niezależnie co wpisze w tab[1][0]. Próbowałem to zapisać przy pomocy wskaźników to z kolei w miejsce pierwszego pola wiersza wpisywała się wartość ostatniego pola w poprzednim wierszu. Już dobrą chwile się zastanawiam co jest nie tak, zapewne coś źle z pętlami ale nie mam pomysłu jak to naprawić żeby działało.

#include <stdio.h>
#include <string.h>

int main ()
{
    int l, k;
    printf("liczba wierszy: ");
    scanf("%d", &l);
    printf("liczba kolumn: ");
    scanf("%d", &k);

    l=l-1;
    k=k-1;

    int tab[l][k];

    int j, i;
    for(j=0; j<=l; j++)
    {
        printf("Wiersz %d: ", j+1);
        for(i=0; i<=k; i++)
        {
            scanf("%d", &tab[j][i]);
        }
    }

    //dla sprawdzenia 3x3 (3 wiersze, 3 kolumny)
    printf("tab[0][0]: %d\n", tab[0][0]);
    printf("tab[0][1]: %d\n", tab[0][1]);
    printf("tab[0][2]: %d\n", tab[0][2]);
    printf("tab[1][0]: %d\n", tab[1][0]);
    printf("tab[1][2]: %d\n", tab[1][1]);
    printf("tab[1][2]: %d\n", tab[1][2]);
    printf("tab[2][0]: %d\n", tab[2][0]);
    printf("tab[2][1]: %d\n", tab[2][1]);
    printf("tab[2][2]: %d\n", tab[2][2]);

    return 0;
}
0

w tab do ostatniego elementu dobierzesz się przez tab[l-1][k-1], więc nie <=, lecz < w pętli.

0

W sumie faktycznie trochę przekombinowałem z zapisem, teraz ustawiłem tak:

 #include <stdio.h>
#include <string.h>

int main ()
{
    int l, k;
    printf("liczba wierszy: ");
    scanf("%d", &l);
    printf("liczba kolumn: ");
    scanf("%d", &k);

    int tab[l][k];

    int j, i;
    for(j=0; j<l; j++)
    {
        printf("Wiersz %d: ", j+1);
        for(i=0; i<k; i++)
        {
            scanf("%d", &tab[j][i]);
        }
    }

    //dla sprawdzenia 3x3 (3 wiersze, 3 kolumny)
    printf("tab[0][0]: %d\n", tab[0][0]);
    printf("tab[0][1]: %d\n", tab[0][1]);
    printf("tab[0][2]: %d\n", tab[0][2]);
    printf("tab[1][0]: %d\n", tab[1][0]);
    printf("tab[1][2]: %d\n", tab[1][1]);
    printf("tab[1][2]: %d\n", tab[1][2]);
    printf("tab[2][0]: %d\n", tab[2][0]);
    printf("tab[2][1]: %d\n", tab[2][1]);
    printf("tab[2][2]: %d\n", tab[2][2]);

    return 0;
}

I działa jak należy, dzieki za pomoc (założyłem że jak deklaruje tab[3] to tworza sie tab[0], tab[1], tab[2] i tab[3] a sie okazalo ze bez tego ostatniego bede pamietal XD)

0

Wypisywanie zrób ładnie w pętli.

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