Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem ze zwracaniem tablic char przez funkcje

Ostatnio zmodyfikowano 2015-08-09 14:08
Autor Wiadomość
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?".

C/C++
//********** funkcje kodowania wiadomosci********************

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;
    //zwracam tablice para_liter do menu glownego
}
//**************lacz****************************************************


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";
    //szybki test czy funkcja dziala
    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;
    //zwracam tablice para_liter [10] [2];
   
}
P-135884
pekfos
» 2015-08-08 14:50:15
Przekaż tablicę jako argument. Nie da się zwracać bez większego kombinowania.
P-135885
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.

C/C++
#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;
}
P-135918
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ą.
P-135920
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ę. 
P-135922
« 1 »
  Strona 1 z 1