milionerzy ładowanie pytań z pliku
Ostatnio zmodyfikowano 2013-11-14 16:28
RazzorFlame |
» 2013-11-13 20:58:36 Zrób sobie klasę pytania, z pliku wczytuj do tej klasy a raczej obiektu tej klasy pytanie i odpowiedzi. Tych obiektów sobie stwórz vector i dodawaj przy kolejnym pytaniu kolejny obiekt. Potem losujesz index pytania i wyświetlasz. class Pytanie { vector < string > m_Odp; unsigned short m_PoprawnaOdp; string m_Pytanie; public: Pytanie & operator <<( std::string s ) { m_Odp.push_back( s ); return * this; } Pytanie( std::string pyt ) : m_Pytanie( pyt ) { } void ustawPoprawnaOdp( unsigned short s ) { m_PoprawnaOdp = s; } };
unsigned short iloscOdp = 0; unsigned short poprawnaOdp = 0; std::vector < Pytanie > pytania; while( !f_Plik.eof() ) { getline( f_Plik, s_Zmienna ); f_Plik >> iloscOdp >> poprawnaOdp; Pytanie pyt( s_Zmienna ); pyt.ustawPoprawnaOdp( poprawnaOdp ); if( iloscOdp > 0 ) for( int i = 0; i < iloscOdp; i++ ) { getline( f_Plik, s_Zmienna ); pyt << s_Zmienna; } pytania.push_back( pyt ); }
Taki mały przykładzik ode mnie. Oczywiście zmienne i obiekty musisz sobie sam dopasować. Możesz też powiększyć klase o kilka dodatkowych pól np. podpowiedzi :P Edit: Pisane na miejscu i nie testowane, nie odpowiadam za ewentualne niezgodności lub wybuch komputera :) Hehe |
|
matiko101 Temat założony przez niniejszego użytkownika |
» 2013-11-13 21:01:51 Czyli pętla for nie potrzebna by to zrobić ? (jak to pisalem nie widzialem odpowiedzi Razzora jutro ją przeanalizuje, bo teraz pora odpocząć ;P ) Mogło by to wyglądać tak ?: ustawił bym pytania od 1 do 10 i 11 do 40 odpowiedzi. los =( rand() % 10 ) + 1 ); if( los == 1 );
cout << vektor[ los ] << vektor[ 11 ] << vektor[ 12 ] << vektor[ 13 ] << vektor[ 14 ]; if( los == 2 ) cout << vektor[ los ] << vektor[ 15 << vektor[ 16 ] <<
a = vektor[ 11 ] + vektor[ 12 ] + vektor[ 13 ] + vektor[ 14 ];
los =( rand() % 10 ) + 1 ); if( los == 1 );
cout << vektor[ los ] << a;
Pewnie duzo tu błedów ale to przykladowe na oko aby bylo wiadomo o co chodzi |
|
matiko101 Temat założony przez niniejszego użytkownika |
» 2013-11-14 10:52:38 Nie mogę zrozumieć niektórych części tego kodu podanego przez RazzorFlame. class Pytanie { vector < string > m_Odp; unsigned short m_PoprawnaOdp; string m_Pytanie; public: Pytanie & operator <<( std::string s ) { m_Odp.push_back( s ); return * this; } Pytanie( std::string pyt ) : m_Pytanie( pyt ) { } void ustawPoprawnaOdp( unsigned short s ) { m_PoprawnaOdp = s; } };
unsigned short iloscOdp = 0; unsigned short poprawnaOdp = 0; std::vector < Pytanie > pytania; while( !f_Plik.eof() ) { getline( f_Plik, s_Zmienna ); f_Plik >> iloscOdp >> poprawnaOdp; Pytanie pyt( s_Zmienna ); pyt.ustawPoprawnaOdp( poprawnaOdp ); if( iloscOdp > 0 ) for( int i = 0; i < iloscOdp; i++ ) { getline( f_Plik, s_Zmienna ); pyt << s_Zmienna; } pytania.push_back( pyt ); }
Jesli cos zle moglby ktos dodac komentarze do poszczegolnych linijek bardzo prosze |
|
RazzorFlame |
» 2013-11-14 15:13:14 What the hell? Zajrzyj lepiej do dokumentacji co robi funkcja eof.
Pytanie( std::string pyt ) : m_Pytanie( pyt ) { }
|
Operator : (dwukropek) przypisuje bądź kopiuje wartość z jednego miejsca pamięci do drugiego (tu obiekt typu std::string)
for( int i = 0; i < iloscOdp; i++ ) { getline( f_Plik, s_Zmienna ); pyt << s_Zmienna; }
|
To jest pętla for która wczytuje odpowiedzi (funkcją getline) z pliku i zapisuje je do obiektu "pyt" klasy Pytanie. Edit: Coś chyba parser ze strony szwankuje :/ Ok działa ale szwankuje coś. |
|
matiko101 Temat założony przez niniejszego użytkownika |
» 2013-11-14 15:51:54 while( !f_Plik.eof() ) { getline( f_Plik, s_Zmienna ); f_Plik >> iloscOdp >> poprawnaOdp; Pytanie pyt( s_Zmienna ); pyt.ustawPoprawnaOdp( poprawnaOdp );
|
|
pekfos |
» 2013-11-14 16:28:08 Operator : (dwukropek) przypisuje bądź kopiuje wartość z jednego miejsca pamięci do drugiego (tu obiekt typu std::string) |
"Operator dwukropka", w tym miejscu, oznacza początek listy inicjalizacyjnej. |
|
1 « 2 » |