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

milionerzy ładowanie pytań z pliku

Ostatnio zmodyfikowano 2013-11-14 16:28
Autor Wiadomość
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.
C/C++
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;
    }
};

//Wczytywanie:

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; //dodawanie odpowiedzi
    }
    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
P-96236
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.
C/C++
los =( rand() % 10 ) + 1 ); //moze byc zle podany zakres bo zawsze mam z tym problem, a pisze jako przykład
if( los == 1 );

cout << vektor[ los ] << vektor[ 11 ] << vektor[ 12 ] << vektor[ 13 ] << vektor[ 14 ]; // tez pewnie zle zakresy
if( los == 2 )
cout << vektor[ los ] << vektor[ 15 << vektor[ 16 ] << //itd.


//Albo: ?
     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
P-96237
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.
C/C++
class Pytanie
{
    vector < string > m_Odp; // tworzymy vektora z odpowiedziami
    unsigned short m_PoprawnaOdp; // zmienna typu short przechowujaca poprawne odpowiedzi
    string m_Pytanie; // zmienna typu string przechowuje pytania
public:
    Pytanie & operator <<( std::string s ) // przeciążasz << i tworzysz zmienna tekstowa s
    {
        m_Odp.push_back( s ); // odpowiedzi dodajesz na koniec vektora m_odp
        return * this;
    }
    Pytanie( std::string pyt ) //Tworzysz zmienna typu string pyt
        : m_Pytanie( pyt ) //co znaczy znak ":" i co robi ta linia ?
    {
    }
    void ustawPoprawnaOdp( unsigned short s ) // funkcja ustawiajaca poprawna odpowiedz
    {
        m_PoprawnaOdp = s; // poprawna odpowiedz to zmienna s
    }
};

//Wczytywanie:

unsigned short iloscOdp = 0; //zmienna typu short ile odpowiedzi
unsigned short poprawnaOdp = 0; //zmienna typu short ile poprawnych odpowiedzi
std::vector < Pytanie > pytania; //tworzymy vector pytania z clasą Pytania
while( !f_Plik.eof() ) //jesli plik sie otworzy
{
    getline( f_Plik, s_Zmienna ); //dlaczego tu jest s_Zmienna ktorej nigdzie nie zadeklarowaliśmy ? nie wiem co sie dzieje w tej linii
   
    f_Plik >> iloscOdp >> poprawnaOdp; //z pliku importujemy ilosc odpowiedzi i poprawne odpowiedzi ?
    Pytanie pyt( s_Zmienna ); // nie rozumiem linijki
    pyt.ustawPoprawnaOdp( poprawnaOdp ); // ustawiamy poprawna odpowiedz
    if( iloscOdp > 0 ) //jesli ilosc odpowiedzi jest wieksza od 0
    for( int i = 0; i < iloscOdp; i++ ) //dopoki ilosc odpowiedzi jest wieksza od i                      
    {
        getline( f_Plik, s_Zmienna ); //...(nie rozumiem tych 2 linii)
        pyt << s_Zmienna; //dodawanie odpowiedzi
    }
    pytania.push_back( pyt ); // dodajemy pytania do vektora
}
Jesli cos zle moglby ktos dodac komentarze do poszczegolnych linijek bardzo prosze
P-96247
RazzorFlame
» 2013-11-14 15:13:14

C/C++
while( !f_Plik.eof() ) //jesli plik sie otworzy
What the hell? Zajrzyj lepiej do dokumentacji co robi funkcja eof.

C/C++
Pytanie( std::string pyt ) //Tworzysz zmienna typu string pyt
    : m_Pytanie( pyt ) //co znaczy znak ":" i co robi ta linia ?
{
}
Operator : (dwukropek) przypisuje bądź kopiuje wartość z jednego miejsca pamięci do drugiego (tu obiekt typu std::string)

C/C++
for( int i = 0; i < iloscOdp; i++ ) //dopoki ilosc odpowiedzi jest wieksza od i                     
{
    getline( f_Plik, s_Zmienna ); //...(nie rozumiem tych 2 linii)
    pyt << s_Zmienna; //dodawanie odpowiedzi
}
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ś.
P-96254
matiko101
Temat założony przez niniejszego użytkownika
» 2013-11-14 15:51:54
C/C++
while( !f_Plik.eof() ) //palnąłem głupotę :( Tak mi sie skojarzyło z plik.is_open() nie wiem czemu.Czyli eof znaczy koniec pliku ? Nie mogę nic wyczytać w google
{
    getline( f_Plik, s_Zmienna ); //zmiennej s_Zmienna nie trzeba deklarować wcześniej ?
    f_Plik >> iloscOdp >> poprawnaOdp; //z pliku importujemy ilosc odpowiedzi i poprawne odpowiedzi ?
    Pytanie pyt( s_Zmienna ); // nie jestem pewien ale podstawiamy do zmiennej pyt zawartość zmiennej s_Zmienna ?
    pyt.ustawPoprawnaOdp( poprawnaOdp ); // ustawiamy poprawna odpowiedz
P-96260
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.
P-96264
1 « 2 »
Poprzednia strona Strona 2 z 2