Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

allegro czytanie z pliku tekstowego

Ostatnio zmodyfikowano 2014-10-18 15:18
Autor Wiadomość
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:
C/C++
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::getline( plik, 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?


P-118755
1aam2am1
» 2014-10-18 13:13:23
C/C++
odczytanyTekst += wiersz;
odczytanyTekst += '\n'; //dodaj znak nowej lini (getline je usuwa podczas czytania)
P-118756
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ć?
P-118758
1aam2am1
» 2014-10-18 13:45:55
Zamiast '\n' przypisz znak nowej lini.
P-118759
drudl
Temat założony przez niniejszego użytkownika
» 2014-10-18 14:00:37
Jak to zrobić?
P-118762
1aam2am1
» 2014-10-18 14:10:44
Niewiem czy alegro je obsługuje. Spróbuj wyświetlić "odczytanyTekst" w konsoli
P-118763
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ć:
C/C++
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::getline( plik, 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!
P-118766
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
C/C++
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
P-118767
« 1 » 2
  Strona 1 z 2 Następna strona