jeśli deklarujesz tablicę w sposób
to indeksy kolejnych komórek to: 0,1,2
nie istnieje element o indeksie 3
dlatego u Ciebie w kodzie robi się rozbajzel (odwołując się do komórki 4 odwołujesz się nie do tego co myślisz)
char tab[ x ][ 4 ][ 50 ];
tab[ k ][ 4 ][ j ] = tab4[ j ];
nie wiem jak :cin.get(tab1, 50); zastąpić od razu tablicą 3 - wymiarową
|
chociażby tak:
char tab[ 30 ][ 30 ][ 30 ];
std::cin.get( tab[ 0 ][ 0 ], 30 );
//
musisz zawsze pamiętać o tym że indeksowanie rozpoczyna się od 0 i kończy na n-1 gdzie n to rozmiar tablicy jaki podałeś w programie
for( int j = 0; j <= 50; j++ )
w tym miejscu powinien znaleźć się operator '<' a nie '<=' gdyż element o indeksie 50 nie istnieje
tab[ k ][ 1 ][ j ] = tab1[ j ];
tab[ k ][ 2 ][ j ] = tab2[ j ];
tab[ k ][ 3 ][ j ] = tab3[ j ];
tab[ k ][ 4 ][ j ] = tab4[ j ];
tu podobnie, zamiast 1,2,3,4 - 0,1,2,3
tab[ k ][ 0 ][ j ] = tab1[ j ];
tab[ k ][ 1 ][ j ] = tab2[ j ];
tab[ k ][ 2 ][ j ] = tab3[ j ];
tab[ k ][ 3 ][ j ] = tab4[ j ];
tu jak wyżej:
cout << endl << endl << tab[ k ][ 1 ] << endl << tab[ k ][ 2 ] << endl << tab[ k ][ 3 ] << endl << tab[ k ][ 4 ] << endl;
for( int k = 0; k <= x; k++ )
albo
k = 0; k < x;
albo
k = 1; k <= x;
gdyż w Twoim przypadku przelecisz o 1 element za dużo
for( int k = 1; k <= x; k++ )
tu preinkrementacja (++k) jest lepsza od postinkrementacji(k++)
Przy preinkrementacji nie tworzysz obiektu tymczasowego, w takich przypadkach raczej i tak to prawie nic nie zmieni ale lepiej już sobie wyrobić taki nawyk na przyszłość
w Twoim kodzie zamiast cin.get() możesz użyć
cin.get() potrzebowałeś zapewne, gdyż cin.getline() nie działał poprawnie, prawda? ;)
jeśli już się decydujesz na taki formularz (Imie, Nazwisko...) to lepiej jakbyś wszędzie używał cin.getline(...);
co jak ktoś przy podawaniu imienia wpisze 2 słowa? :)
zamiast
for( int j = 0; j <= 50; j++ )
{
tab[ k ][ 1 ][ j ] = tab1[ j ];
tab[ k ][ 2 ][ j ] = tab2[ j ];
tab[ k ][ 3 ][ j ] = tab3[ j ];
tab[ k ][ 4 ][ j ] = tab4[ j ];
}
możesz użyć funkcji strcpy (chociaż w tym przypadku i tak lepiej nie bawić się w kopiowanie stringów tylko od razu wczytać tab[x][y])
int x;
...
char tab[ x ][ 4 ][ 50 ];
nie powinno się tak robić (chodzi mi o to x przy deklarowaniu tablicy)
jeśli chcesz mieć tablicę o nieznanym przy kompilacji rozmiarze to zapoznaj się z
dynamiczną alokacją pamięcipiszesz w C++ więc dołączaj
pomijając fakt, że w Twoim programie ta biblioteka i tak jest zbędna
różnica między stdio.h a cstdio jest taka, że w cstdio wszystko jest upchnięte w przestrzeni nazw std, nic poza tym
(to że aktualnie nie musisz pisać std:: przy wywoływaniu chociażby printf nie oznacza, że w przyszłości nie będziesz musiał)