int k, w;
int tab[k][w];
@Rafał Żurawski: no i jaki rozmiar ma ta tablica, skoro zmiennym k
i w
nie przypisałeś żadnych wartości? Nie wiadomo – UB jak nic. Natomiast późniejsze przypisanie wartości niczego nie zmieni, bo zmienne k
i w
nie są nijak połączone ze zmienną tab
.
int k, w;
cout << "Podaj liczbe kolumn i wierszy: " << endl;
cin >> k, w;
int tab[k][w]; // "k" i "w" w tym momencie mają znane wartości
Takie coś zadziała, o ile kompilator wspiera VLA.
Aby mieć pewność, że kod będzie działał prawidłowo bez względu na kompilator, użyj operatora new
i przydziel pamięć dla tablicy, a następnie w pętli dla każdej kolumny. Na koniec należy taką tablicę zwolnić – znów w pętli zwalnia się najpierw kolumny, na koniec samą tablicę. Przykład użycia znajdziesz tutaj – http://www.cplusplus.com/forum/articles/7459/ (punkt Pointer based multi-dimensional arrays).
A jak już ogarniesz alokowanie pamięci dla tablic to kolejnym krokiem będzie poznanie wektorów.
Edit: w skrócie można to przedstawić tak – najpierw deklaracja zmiennych:
int **tab;
int cols, rows;
Teraz pobranie danych określających liczbę kolumn i wierszy:
cout << "Enter the number of columns and rows: ";
cin >> cols, rows;
Teraz alokacja pamięci dla tablicy:
tab = new int*[rows];
for(int row = 0; row < rows; row++)
tab[row] = new int[cols];
W tym momencie tablica jest gotowa to użycia – w sposób standardowy możesz wpisywać dane i je odczytywać. Na koniec pracy, jeśli już tablica nie będzie dłużej potrzebna, należy zwolnić pamięć:
for(int row = 0; row < rows; row++)
delete [] tab[row];
delete [] tab;
Do potestowania tutaj – http://cpp.sh/6ib5c