maze Temat założony przez niniejszego użytkownika |
[C++] Dynamiczne tablice dwuwymiarowe » 2013-01-29 15:22:15 Czesc, mam pytanie czy ten kod, który napisalem odpowiada temu czym ma byc. a mianowicie : Funkcją tworzącą dynamiczną tablicę wskaźników na teksty o maksymalnej dlugości 30 znaków. char ** tablica( int n ) { if( char ** tablica = new char[ n ] ) for( int i = 0; i < n; i++ ) { tablica[ i ] = new char[ 30 ]; if( tablica[ i ] == NULL ) cout << "Brak pamieci"; } else cout << "Brak pamieci"; return tablica; }
Od razu pytanie, czy jezeli zmienna wskaznikowa **tablica tworze wewnatrz funkcji, to czy po zakonczeniu funkcji, wartosc tego przekazywanego wskaznika nie wyzeruje sie??? Pozdrawiam! |
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 16:55:10 Słuchajcie, z tworzeniem tablicy poradzilem sobie, gryzac to od troche innej strony. Niestety problem mam zeby ja teraz zapelnij. Tak wiec, tablica jest wskaznikiem na N-elementowa tablice wskaznikow na teksty(tablice charow). Jak sie zabrac do tego, zeby ja zapelnic? Proboje napisac taka funkcje i jest ona w kodzie poniezej, jednak nie dziala... (chociaz program sie kompiluje). #include <iostream>
using namespace std;
void stworz_tab( char ** tablica, int n ) { tablica = new char *[ 5 ]; for( int i = 0; i < n; i++ ) { tablica[ i ] = new char[ 30 ]; if( tablica[ i ] == NULL ) cout << "Brak pamieci"; } }
void wyswietl( char ** tablica, int w ) { for( int i = 0; i < w; i++ ) { for( int j = 0; j < 30; j++ ) { cout << tablica[ i ][ j ]; } cout << endl; } }
void zapelnij( char ** tablica, int n ) { for( int i = 0; i < n; i++ ) { cout << "Podaj " << i + 1 << "-szy tekst" << endl; cin >> tablica[ i ]; } }
int main() { cout << "Jak duza tablice chcesz utworzyc?" << endl; int rozmiar; cin >> rozmiar; char ** tablica; stworz_tab( tablica, rozmiar ); zapelnij( tablica, rozmiar ); wyswietl( tablica, rozmiar ); return 0; }
|
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 17:03:46 zapewne trzeba tu uzyc cin.getline, troche mi to wylecialo z glowy. Ale w formie jak ponizej niestety dalej to nie funkcjonuje... void zapelnij( char ** tablica, int n ) { for( int i = 0; i < n; i++ ) { cout << "Podaj " << i + 1 << "-szy tekst" << endl; cin.getline( tablica[ i ], 30 ); } } Ktokolwiek jest w stanie pomoc ???? |
|
ison |
» 2013-01-29 17:14:06 void stworz_tab( char ** tablica, int n ) { tablica = new char *[ 5 ]; for( int i = 0; i < n; i++ ) { tablica[ i ] = new char[ 30 ]; if( tablica[ i ] == NULL ) cout << "Brak pamieci"; } }
tutaj podpisujesz coś bezpośrednio pod 'tablica', która jest kopią przekazaną do funkcji przekaż to przez referencję - dopisz & |
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 17:31:19 dzieki za odpowiedz ison. Teraz mam taka sytuacje, ze funkcja wczytujaca przelatuje przez petle wyswietlajac couty, jednak wogole nie wywoluje funkcji cin.getline(), ktora ma pobrac linie znakow i zapisac ja pod dany wskaznik. No wlasnie tutaj sie troche gubie, bo kazdy z elementow tej dynamicznie tworzonej tablicy, jest wskaznikiem na tablice charow. Jak wpisac cos pod ta tablice na ktora wskazuje wskaznik???? >>> bo pod tablica[ i ] przeciez nie ma jeszcze tej tablicy charow, jest tylko wskaznik do niej.... void zapelnij( char **& tablica, int n ) { for( int i = 0; i < n; i++ ) { cout << "Podaj " << i + 1 << "tekst" << endl; cin.getline( * tablica + i, 30 ); } }
|
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 17:56:28 okey w zasadzie to dziala, tylko w jakis dziwaczny sposob.
Mianowicie jezeli podam ilosc tekstow tworzonych np. 5, to funkcja wczytujaca opuszcza 1 wpis wyswietlajac tylko napis "Wpisz 1" i odrazu pod spodem drukuje wpisz 2, ktory juz mozna podac, i zapamietuje go pozniej wyswietlajac.....
|
|
krzyk |
» 2013-01-29 18:04:53 przed cin.getline daj cin.sync(); |
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 18:08:19 dalej opuszcza mi pierwszy wpis, tak to wyglada: Jak duza tablice chcesz utworzyc? 5 Podaj 1tekst Podaj 2tekst
Podaj 3tekst
Podaj 4tekst
Podaj 5tekst
kompletnie tego nie rozumiem, wszytskie indeksy ida od 0..... Co do tego cin.sync(), moze ma jakies znaczenie ze kompiluje pod linuksem, gcc ?? |
|
« 1 » 2 |