Problem ze zwracaniem tablic char przez funkcje
Ostatnio zmodyfikowano 2015-08-09 14:08
Piotrekdoro Temat założony przez niniejszego użytkownika |
Problem ze zwracaniem tablic char przez funkcje » 2015-08-08 14:44:01 Witam, jako że naukę programowania zacząłem dosłownie dwa dni temu proszę o wyrozumiałość w stosunku do moich potencjalnie głupich pytań. Poniżej załączyłem fragment dłuższego programu, znajdują się w nim dwie funkcje. Jedna z nich ma za zadanie ułożyć tablicę 10x2 stworzoną z par liter i zwrócić ją do drugiej funkcji, która jest tylko prostym menu, ta natomiast ma tę samą wartość zwrócić do niezałączonego tu menu głównego. Funkcja tworząca tablicę sama w sobie działa dobrze, ale próbowałem na różne sposoby przesyłać zmienną para_liter o poziom niżej i żaden z nich nie zadziałał. Wydaje mi się, że proces powinien wyglądać tak: Funkcja A wysyła wynik działań na zmiennej lokalnej para_liter w postaci całej tablicy do funkcji B, w której to wynik jest przyporządkowany do kolejnej zmiennej lokalnej będącej również tablicą o tych samych wymiarach, następnie ta zmienna lokalna przekazuje ten wynik do menu głównego, a ten przyporządkowuje tablicę do zmiennej globalnej. Moje pytanie brzmi "jak poprawić poniższy kod by tak się stało?".
char ustaw_panel_sterujacy( void ) { int wybor_opcji; char para_liter[ 10 ][ 2 ]; cout << "\nMasz do wyboru 10 kabli, ktorymi mozesz zamieniac ze soba dowolne 10 par liter" << "\nPrzy pomocy klawiatury wybierz pierwsza z liter i zatwierdz wybor, nastepnie" << "\nwybierz z klawiatury litere ktora chcesz zamienic z litera pierwsza" << "\n \nKomendy:" << "\n \n1). Lacz" << "\n \n2). Cofnij\n \n"; poczatek: cin >> wybor_opcji; switch( wybor_opcji ) { case 1: para_liter = lacz(); break; case 2: menu_glowne_zakoduj_wiadomosc(); break; default: cout << "\nBrak takiej opcji, sproboj jeszcze raz\n \n"; break; } goto poczatek; return para_liter; }
char lacz( void ) { int i = 0, j = 0; char para_liter[ 10 ][ 2 ]; for( i = 0, j = 0; i <= 9; i++ ) { cout << "\n \nPozostalo " << 10 - i << " kabli\nWybierz pierwsza litere\n \n"; if( j == 1 ) { j = 0; } cin >> para_liter[ i ][ j ]; cout << "\n \nWybierz druga litere\n \n"; if( j == 0 ) { j += 1; cin >> para_liter[ i ][ j ]; } } cout << "Kable sie skonczyly\n \n"; cout << para_liter[ 0 ][ 0 ] << "---->" << para_liter[ 0 ][ 1 ] << endl << para_liter[ 1 ][ 0 ] << "---->" << para_liter[ 1 ][ 1 ] << endl << para_liter[ 2 ][ 0 ] << "---->" << para_liter[ 2 ][ 1 ] << endl << para_liter[ 3 ][ 0 ] << "---->" << para_liter[ 3 ][ 1 ] << endl << para_liter[ 4 ][ 0 ] << "---->" << para_liter[ 4 ][ 1 ] << endl << para_liter[ 5 ][ 0 ] << "---->" << para_liter[ 5 ][ 1 ] << endl << para_liter[ 6 ][ 0 ] << "---->" << para_liter[ 6 ][ 1 ] << endl << para_liter[ 7 ][ 0 ] << "---->" << para_liter[ 7 ][ 1 ] << endl << para_liter[ 8 ][ 0 ] << "---->" << para_liter[ 8 ][ 1 ] << endl << para_liter[ 9 ][ 0 ] << "---->" << para_liter[ 9 ][ 1 ] << endl; return para_liter; }
|
|
pekfos |
» 2015-08-08 14:50:15 Przekaż tablicę jako argument. Nie da się zwracać bez większego kombinowania. |
|
Piotrekdoro Temat założony przez niniejszego użytkownika |
» 2015-08-09 13:34:31 Rozumiem, że chodzi o coś takiego? Program zamieniający tablicę 2x2 z samymi zerami na tablice 1,2,3,4. #include <iostream>
using namespace std;
int funkcja( int tablica[ 2 ][ 2 ] ) { tablica[ 0 ][ 0 ] = 1; tablica[ 0 ][ 1 ] = 2; tablica[ 1 ][ 0 ] = 3; tablica[ 1 ][ 1 ] = 4; return tablica[ 2 ][ 2 ]; }
int main() { int tablica[ 2 ][ 2 ]; tablica[ 0 ][ 0 ] = 0; tablica[ 0 ][ 1 ] = 0; tablica[ 1 ][ 0 ] = 0; tablica[ 1 ][ 1 ] = 0; cout << tablica[ 0 ][ 0 ] << " " << tablica[ 0 ][ 1 ] << endl << tablica[ 0 ][ 0 ] << " " << tablica[ 0 ][ 1 ] << endl << endl; funkcja( tablica ); cout << tablica[ 0 ][ 0 ] << " " << tablica[ 0 ][ 1 ] << endl << tablica[ 0 ][ 0 ] << " " << tablica[ 0 ][ 1 ] << endl << endl; return 0; }
|
|
pekfos |
» 2015-08-09 13:47:04 Prawie. Niczego nie powinieneś zwracać z tej funkcji. To, co postawiłeś po return to zwykły odczyt jednej wartości z tablicy, wychodząc poza zakres każdym indeksem. Zwracasz przecież int - jedną liczbę. Można to przerobić, by funkcja zwracała adres tablicy, która została jej przekazana, ale po co? I tak nic nie robisz z wartością zwracaną. |
|
Piotrekdoro Temat założony przez niniejszego użytkownika |
» 2015-08-09 14:08:09 To tylko szybki przykład, dlatego nic nie robię z wartością zwracaną. Dziękuję za pomoc, teraz przynajmniej działa. Przeczytam sobie teraz co nieco o funkcjach i tablicach, powinno rozjaśnić sprawę. |
|
« 1 » |