brandonlee Temat założony przez niniejszego użytkownika |
[C++] Tablica typu rekordowego jako parametr funkcji » 2015-09-03 20:28:28 Witam, próbuję przekazać tablicę z elemantami struktury jako parametr funkcji, niestety na wszystkei przykłady na jakie się natykam są dla każdej opcji oddzielnie. Próbowałem walczyć z & i *, ale wciąż poprawnie tabica wyświetla się tylko lokalnie z poziomu struktury z której została wczytana, aa z main już nie. Byłbym wdzięczny za jakąś podpowiedź, czego szukać, ew co doczytać - może jakiś mały przykład jak wykonywać działanie na tablicy tego typu przekazanej do funkcji. Pozdrawiam. Poniżej część kodu nad którym się męczę. #include <iostream> #include <cstdlib>
using namespace std;
const int n = 2;
struct SImieWiek { string imie; int wiek; };
void czytaj_tablice( SImieWiek tbl[][ n ] ) { cout << "Funkcja czytaj tablice" << endl; cout << "Wprowadz tablice do przetworzenia: " << endl; SImieWiek A[ n ]; for( int i = 0; i < n; i++ ) { cout << "Podaj imie: " << endl; cin >> A[ i ].imie; cout << "Podaj wiek: " << endl; cin >> A[ i ].wiek; } cout << "Aktualnie w tablicy znajduje sie: " << endl; for( int i = 0; i < n; i++ ) { cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl; } }
void pisz_tablice( SImieWiek tbl[][ n ], string nazwa ) { SImieWiek A[ n ]; cout << nazwa << endl; for( int i = 0; i < n; i++ ) { cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl; } }
int main() { SImieWiek tbl[ n ][ n ]; cout << "Program glowny" << endl; czytaj_tablice( tbl ); cout << endl; pisz_tablice( tbl, "Tablica oryginalna" ); return 0; }
|
|
stevy |
» 2015-09-03 21:19:44 void czytaj( COS ** tablica, short wielkosc ) { }
int main( void ) { short n = 2; COS tab[ n ][ n ]; czytaj( tab, n ); }
może tak? |
|
brandonlee Temat założony przez niniejszego użytkownika |
» 2015-09-03 21:46:49 ~stevy, dziękuję, ale nie bardzo to działa. Chociaż co bardziej prawdopodobne, nie wiem jak to zaadaptować do programu. ||=== Build: Debug in 20150903 (compiler: GNU GCC Compiler) ===| xxxxxxxxxxxxx\main.cpp||In function 'int main()':| xxxxxxxxxxxxx\main.cpp|53|error: cannot convert 'SImieWiek (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'SImieWiek**' for argument '1' to 'void czytaj_tablice(SImieWiek**, short int)'| xxxxxxxxxxxxx\main.cpp|57|error: cannot convert 'SImieWiek (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'SImieWiek (*)[2]' for argument '1' to 'void pisz_tablice(SImieWiek (*)[2], std::string)'| ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
W tej mojej pierwszej wersji wygląda to tak: Jak można zrobić, żeby ta tablica, którą policzyła funkcja (poprawnie) była widoczna dla innych struktur? Program glowny Funkcja czytaj tablice Wprowadz tablice do przetworzenia: Podaj imie: abcde Podaj wiek: 12 Podaj imie: qwert Podaj wiek: 34 Aktualnie w tablicy znajduje sie: Imie: abcde, wiek: 12 Imie: qwert, wiek: 34
Tablica oryginalna Imie:, wiek: 2686712 Imie:, wiek: 4645073
Process returned 0( 0x0 ) execution time : 20.416 s Press any key to continue. |
|
michal11 |
» 2015-09-03 22:33:04 Jeżeli tablica jest statyczna to trzeba do funkcji przekazać również jej rozmiar, o tak: void fun( int tab[][ 3 ] ); w tym wypadku nie ma znaczenia czy to jest tablica intów czy struktur czy czegokolwiek innego. |
|
brandonlee Temat założony przez niniejszego użytkownika |
» 2015-09-03 22:44:26 ~michal11, tak właśnie robię - widać w moim kodzie w pierwszym poście: void czytaj_tablice( SImieWiek tbl[][ n ] )
i
void pisz_tablice( SImieWiek tbl[][ n ], string nazwa )
kiedy main wywołuje czytaj_tablice - to wszystko wewnątrz tej funkcji działa - czyta tablice i poprawnie ją wyświetla, ale tylko wewnątrz niej - tylko co trzeba dodać/zmieć, żeby te poprawne wartości były widoczne np. z funkcji pisz_tablice? Bo teraz przy próbie odczytania są jakieś losowe cyfry. |
|
Monika90 |
» 2015-09-03 22:48:36 void pisz_tablice( SImieWiek tbl[][ n ], string nazwa ) parametr nazywa się tbl, a używasz jakiegoś A, które nie ma z tbl nic wspólnego cout << "Imie: " << A[ i ].imie << ", wiek: " << A[ i ].wiek << endl; W funkcji czytaj_tablice tak samo. |
|
brandonlee Temat założony przez niniejszego użytkownika |
» 2015-09-03 23:26:52 ~Monika90, dziękuję, ale niestety nic mi to nie mówi. Pozmieniałem A na tbl, pozmieniałem n na liczby, dodałem dodatkową pętlę for, dodałem wskaźnik i mnóstwo innych rzeczy - dalej bez rezultatu. "A" używałem jako zmiennej dla struktury - faktycznie nie ma nic wspólnego z tbl, ale gdybym wiedział jak to poprawić to nie zawracałbym głowy na forum. |
|
Monika90 |
» 2015-09-03 23:52:50 Tak można to zrobić #include <iostream> #include <cstdlib>
using namespace std;
const int n = 2;
struct SImieWiek { string imie; int wiek; };
void czytaj_tablice( SImieWiek tbl[][ n ] ) { cout << "Funkcja czytaj tablice" << endl; cout << "Wprowadz tablice do przetworzenia: " << endl; for( int j = 0; j < n; j++ ) for( int i = 0; i < n; i++ ) { cout << "Podaj imie: " << endl; cin >> tbl[ j ][ i ].imie; cout << "Podaj wiek: " << endl; cin >> tbl[ j ][ i ].wiek; } cout << "Aktualnie w tablicy znajduje sie: " << endl; for( int j = 0; j < n; j++ ) for( int i = 0; i < n; i++ ) { cout << "Imie: " << tbl[ j ][ i ].imie << ", wiek: " << tbl[ j ][ i ].wiek << endl; } }
void pisz_tablice( SImieWiek tbl[][ n ], string nazwa ) { }
int main() { SImieWiek tbl[ n ][ n ]; cout << "Program glowny" << endl; czytaj_tablice( tbl ); cout << endl; pisz_tablice( tbl, "Tablica oryginalna" ); return 0; }
Jak widzisz jest tam pętla zagnieżdżona w pętli i podwójne indeksy przy tbl, bo przecież używamy tablicy dwuwymiarowej. |
|
« 1 » 2 |