Odczyt danych z pliku do tablicy[x][y]
Ostatnio zmodyfikowano 2010-03-14 15:27
elradziu Temat założony przez niniejszego użytkownika |
Odczyt danych z pliku do tablicy[x][y] » 2010-03-12 11:03:18 Witam mam taki problem w pliku mam zapisaną macierz o wymiarach [X]x[Y] I robie tak wczytuje każdy wiersz do stringu A potem kazdy znak stringu do komurki tablicy no i cos nie działa bo jak zapisuje tablice do innego pliku to mam same cyfry 48. Kod: fstream mapa; if( mapa.good() ) { mapa.open( "mapa.mapx", ios::in ); string linia; for( int x1 = 0; x1 < 12; x1++ ) { getline( mapa, linia ); for( int y1 = 0; y1 < 16; y1++ ) { tablica[ y1 ][ x1 ] = linia[ y1 ]; } } } Wcześniej jest zdeklarowana tablica[16][12] tablica jest typu int |
|
malan |
» 2010-03-12 19:53:26 tablica[y1][x1]=linia[y1];
To nie powinno być tak: tablica[x1][y1]=linia[y1];
? |
|
elradziu Temat założony przez niniejszego użytkownika |
» 2010-03-12 22:09:22 Kod: int tablica[ 16 ][ 12 ]; .... void load_mapa() { fstream mapa; if( mapa.good() ) { mapa.open( "mapa.mapx", ios::in ); string linia; for( int x1 = 0; x1 < 12; x1++ ) { getline( mapa, linia ); for( int y1 = 0; y1 < 16; y1++ ) { tablica[ y1 ][ x1 ] = linia[ y1 ]; } } }
pierwszy wymiar tablicy ma 16 a drugi 12 jeżeli za mienie tak ja mówisz to tam gdzie mam wymiar 16 będę zapisywał 12 a tam gdzie wymiar 12 zapisać będę próbował 16 zmiennych innymi słowy będę chciał do macierzy 16x12 wpisać macierz 12x16. I chyba nie zauważyłeś że y1 przyjmuje maksymalnie wartość 16 a x1 12. Więc tu błędu nie ma. No może że się mylę:( |
|
malan |
» 2010-03-12 23:53:26 Hmmm... tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' ); ? |
|
elradziu Temat założony przez niniejszego użytkownika |
» 2010-03-13 09:40:34 Zadziałało:) Jak możesz powiedz o co chodzi z tym: tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' );
|
|
malan |
» 2010-03-13 20:22:42 |
|
elradziu Temat założony przez niniejszego użytkownika |
» 2010-03-14 10:33:50 Ok to pytanie z innej beczki. Czemu nie zapisywało wartości prawidłowej? tylko powiększało je o 0? |
|
malan |
» 2010-03-14 13:30:57 Nie o 0, tylko o znak '0' (czyli 48) :). Może od początku. Każdy znak zapisany w pliku - "a b c 1 ! % g" ma swoją reprezentację liczbową, np. 0 - 48 1 - 49 a - 97 ! - 33
Tak jak w tabeli :). Ty zapisywałeś do pliku tylko cyfry, czyli przykładowo wyglądało to tak: 11111 10101 00400
Wczytując te cyfry z pliku (w Twoim przypadku do zmiennej typu int) "pobierałeś" ich reprezentację liczbową, czyli wg. powyższego przykładu Twoja tablica prezentowałby się tak: 49 49 49 49 49 49 48 49 48 49 48 48 52 48 48
Reprezentacją liczbową znaku '0' jest 48, znaku '1' jest 49, a znaku '4' - 52 :). Pytanie: Co zrobić żeby z '0' uzyskać liczbę 0 ? Odpowiedź: Skoro znak '0' ma wartość 48 to hmm... może wystarczy odjąć 48 ? Tak! To jest to! tablica[ y1 ][ x1 ] =( linia[ y1 ] - '0' );
tablica[ y1 ][ x1 ] =( linia[ y1 ] - 48 )
Czemu to działa? Bo reprezentacją liczbową znaku '0' jest 48 :). Cała magia :). Zauważ, że tak jest w przypadku dalszych cyfr: '0' - 48 = 0 '1' - 48 = 1 '2' - 48 = 2
Mam nadzieje, że Ci za bardzo nie pogmatwałem w głowie :). |
|
« 1 » 2 |