Winner Temat założony przez niniejszego użytkownika |
Wczytywanie liczb z pliku do tablicy » 2012-05-16 18:43:52 Witam, podpowie mi ktos jak wczytać liczby do tablicy dwuwymiarowej? Np. int map[ 12 ][ 5 ] = { 0, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; I chce to wczytać z pliku.(tak, żeby te liczby były w pliku a w moim programi tylko kod do wczytywania tych liczb) Myślę, że jasno opisałem mój problem. |
|
xevuel |
» 2012-05-16 18:46:59 Obsługa plikówTutaj masz jak wczytać liczbę z pliku. A co do przypisania jej do tablicy dwuwymiarowej, to użyj zagnieżdżonych pętli for: for( int i = 0; i < 1500100900; i++ ) for( int j = 0; j < 1500100900; j++ ) tablica[ i ][ j ] = liczba;
|
|
Winner Temat założony przez niniejszego użytkownika |
» 2012-05-16 21:11:33 Ale mam wszystki liczby od razu przypisać do zmiennej "liczba" czy po kolei z pliku wczytywać oddzielnie do tablicy? Nie rozumiem tego za bardzo. |
|
xevuel |
» 2012-05-16 21:25:43 No po kolei odczytujesz daną liczbę z pliku. I potem wstawiasz to do tablicy... Taki pseudokod: pętla 1() pętla 2 () { wczytaj kolejną liczbę przypisz ją do tablicy }
|
|
Winner Temat założony przez niniejszego użytkownika |
» 2012-05-16 21:31:28 Postaram się coś zakodzić. A w między czasi na necie znalazłem taki kod: #include <iostream> #include <fstream> #include <string>
void update( std::string dane, int * tablica ) { int tablica_pos = 0; for( int i = 0; i < dane.size(); i++ ) { if( dane[ i ] < 48 || dane[ i ] > 57 ) continue; tablica[ tablica_pos ] =( int )( dane[ i ] - 48 ); tablica_pos++; } }
int main() { std::string dane; std::ifstream Plik( "mapa.txt" ); int Y = 5, X = 10; int tablica[ Y ][ X ]; int tablica_pos = 0; for( int y = 0; y < Y; y++ ) for( int x = 0; x < X; x++ ) tablica[ y ][ x ] = 0; std::cout << "Dane z pliku:" << std::endl; while( true ) { Plik >> dane; if( Plik.fail() ) break; std::cout << dane << std::endl; update( dane, tablica[ tablica_pos++ ] ); } std::cout << "\nDane z tablicy:" << std::endl; for( int y = 0; y < Y; y++ ) for( int x = 0; x < X; x++ ) { std::cout << tablica[ y ][ x ]; if( x < X - 1 ) std::cout << "."; else std::cout << std::endl; } Plik.close(); std::cout << "\nWcisnij [ENTER]"; getchar(); return 0; } Czy On jest dobry i mogę się na nim wzorować? |
|
xevuel |
» 2012-05-16 21:41:33 Działa ci tak jak chcesz? To znaczy, że jest dobry. Jak na tak banalne zadanie to strasznie on skomplikowany... Poza tym, widać że pisany w Devie - ten kod: int Y = 5, X = 10; int tablica[ Y ][ X ];
nie skompiluje ci się pod innym IDE. Jest niezgodny ze standardami. @down: Right. Ale nie zawsze, bo C::B ma kilka tych kompilatorów dołączanych ze sobą, i nie wiadomo, którego użyto :) |
|
SeaMonster131 |
» 2012-05-16 22:22:15 @up: pod Code::Blocks też Ci sie skompiluje. A co do tematu, no to wiesz jak otworzyć plik ? Jeżeli nie to Obsługa plików. Następnie z pliku wczytujesz liczbę w pętlach for, tak jak podał Ci to @xevuel. for(..) { for(..) { plik >> tablica[ y ][ x ]; } }
|
|
Winner Temat założony przez niniejszego użytkownika |
» 2012-05-17 17:57:57 A jak za pomocą tej funkcji istream & seekg( streamoff offset, ios_base::seekdir ); zmienić pozycje kursora w pliku o 1? Bo jak wpisuje jakąs liczbe zamiast pierwszego argumentu tej funkcji to wywalał błędy: main.cpp||In function 'int main()':| main.cpp|22|error: expected primary-expression before ')' token| main.cpp|22|error: initializer expression list treated as compound expression| main.cpp|22|warning: unused variable 'seekg'| ||=== Build finished: 2 errors, 1 warnings ===| |
|
« 1 » 2 3 |