C++ Tablice dynamiczne
Ostatnio zmodyfikowano 2019-03-12 16:52
Mavannkas Temat założony przez niniejszego użytkownika |
C++ Tablice dynamiczne » 2019-03-12 08:06:29 bool Czytaj( char T[], int & rozmiar, int & akt ) { if( akt < rozmiar ) { cin >> T[ akt ]; if( T[ akt++ ] == '0' ) { akt--; return false; } return true; } rozmiar *= 2; char * NTab = new char[ rozmiar ]; for( int i = 0; i < akt; i++ ) { NTab[ i ] = T[ i ]; } delete[] T; T = NTab; cin >> T[ akt ]; if( T[ akt++ ] == '0' ) return false; return true; } Mam taką funkcje. Za każdym razem gdy próbuje wprowadzać dane wywala mi brak odpowiedzi. Pomożecie? Gdzie zrobiłem błąd? |
|
pekfos |
» 2019-03-12 11:53:59 Powinieneś przekazywać wskaźnik na tablicę przez referencję.
Do tego twoja funkcja jest przekombinowana. Bez problemu mógłbyś ją napisać 2 razy krócej, bez niepotrzebnych powtórzeń kodu i błędów - w dwóch różnych miejscach obsługujesz cyfrę zero i w zależności od niezwiązanych (?) okoliczności, raz zaliczasz zero do danych, a raz nie. Do tego w pesymistycznym przypadku, wczytanie zera powoduje niepotrzebną realokację pamięci. |
|
Mavannkas Temat założony przez niniejszego użytkownika |
» 2019-03-12 13:50:42 int main() { int rozmiar = 0; char * Tab = nullptr; cout << "Wpisz liczbê w zapisie zymskim.\nWprowadz 0 aby zakonczyc wczytywanie\n"; while( Czytaj( Tab, rozmiar ) ); }
bool Czytaj( char * Tab, int & rozmiar ) { char bufor; cin >> bufor; if( bufor == '0' ) return false; char * NTab = new char[ rozmiar + 1 ]; for( int i = 0; i < rozmiar; ++i ) { NTab[ i ] = Tab[ i ]; } NTab[ rozmiar ] = bufor; delete[] Tab; Tab = NTab; rozmiar++; return true; }
Teraz mam takie coś. Źle przesyłam wskaźnik do funkcji? |
|
pekfos |
» 2019-03-12 16:52:31 Powinieneś przekazywać wskaźnik na tablicę przez referencję. |
|
|
« 1 » |