drudl Temat założony przez niniejszego użytkownika |
allegro czytanie z pliku tekstowego » 2014-10-18 13:11:28 Mam następujący problem. Próbuję czytania z pliku tekstowego przez fstream. W pliku tekstowym mam taką treść: ala ma kota ala ma jeszcze jednego kota Kiedy wyświetlam to na ekranie wyświetla się tak: ala ma kotaala ma jeszcze jednego kota To mój kod: std::ifstream plik; plik.open( "tekst.txt" ); if( plik.good() ) { textprintf( screen, font, 0, 0, makecol( 255, 255, 128 ), "Udalo sie otworzyc plik tekst.txt" ); } else { textprintf( screen, font, 0, 0, makecol( 255, 255, 128 ), "Nie udalo sie otworzyc pliku tekst.txt" ); } std::string odczytanyTekst;
std::string wiersz; for( bool bWczytano = std::getline( plik, wiersz ); bWczytano; bWczytano = std::getline( plik, wiersz ) ) { odczytanyTekst += wiersz; } odczytanyTekst.data();
textout_ex( screen, font, odczytanyTekst.data(), 0, 10, makecol( 250, 250, 250 ), - 1 ); readkey();
plik.close(); Jest jakiś sposób, żeby wyszły znaki nowej lini? |
|
1aam2am1 |
» 2014-10-18 13:13:23 odczytanyTekst += wiersz; odczytanyTekst += '\n';
|
|
drudl Temat założony przez niniejszego użytkownika |
» 2014-10-18 13:22:32 U mnie to nie działa. Wychodzi mi: ala ma kota^ala ma jeszcze jednego kota^ Co to może oznaczać? |
|
1aam2am1 |
» 2014-10-18 13:45:55 Zamiast '\n' przypisz znak nowej lini. |
|
drudl Temat założony przez niniejszego użytkownika |
» 2014-10-18 14:00:37 Jak to zrobić? |
|
1aam2am1 |
» 2014-10-18 14:10:44 Niewiem czy alegro je obsługuje. Spróbuj wyświetlić "odczytanyTekst" w konsoli |
|
drudl Temat założony przez niniejszego użytkownika |
» 2014-10-18 14:41:55 Allegro nie obsługuje chyba znaku nowej linii. Trzeba to było trochę obrobić: std::ifstream plik; plik.open( "tekst.txt" ); if( plik.good() ) { textprintf( screen, font, 0, 0, makecol( 255, 255, 128 ), "Udalo sie otworzyc plik tekst.txt" ); } else { textprintf( screen, font, 0, 0, makecol( 255, 255, 128 ), "Nie udalo sie otworzyc pliku tekst.txt" ); } std::string odczytanyTekst;
std::string wiersz; for( bool bWczytano = std::getline( plik, wiersz ); bWczytano; bWczytano = std::getline( plik, wiersz ) ) { odczytanyTekst += wiersz; } odczytanyTekst.data(); { int y = 10; try { for( int pozycja = 0, x = 0; 1; ++pozycja ) { std::string znak; std::string nl( "\\" ); znak = odczytanyTekst.substr( pozycja, 1 ); if( znak == nl ) { std::string n( "n" ); znak = odczytanyTekst.substr( ++pozycja, 1 ); if( znak == n ) { y += 10; x = 0; continue; } } textout_ex( screen, font, znak.data(), x, y, makecol( 250, 250, 250 ), - 1 ); x += 8; } } catch( std::out_of_range ) { textout_ex( screen, font, "Koniec wczytywania", 0, y + 10, makecol( 250, 250, 250 ), - 1 ); } textout_ex( screen, font, "Koniec petli", 0, y + 20, makecol( 250, 250, 250 ), - 1 ); } readkey();
plik.close(); Jedyny problem to taki, że w pliku tekstowym trzeba coś dodać na koniec linii. Ja dodałem "\n". Problem rozwiązany! |
|
Monika90 |
» 2014-10-18 14:42:35 Na to wygląda, że funkcja textout_ex nie wie co to znaczy przejście do nowej linii. Nie wiem czy jakaś inna funkcja w allegro to potrafi. Prawdopodobnie, musisz rysować każdą linię osobno na różnych pozycjach. A przy okazji for( bool bWczytano = std::getline( plik, wiersz ); bWczytano; bWczytano = std::getline( plik, wiersz ) ) { }
to nie jest prawidłowy kod. A konkretnie ten fragment bool bWczytano = std::getline( plik, wiersz ) i ten bWczytano = std::getline( plik, wiersz ) są błędne |
|
« 1 » 2 |