Quiz Obiektowy C++, zagwozkda z wczytywaniem tekstu

0

Nie wiem jak umieścić dane z konstruktora do pliku tekstowego. Coś tam próbowałem, ale nie wyszło, a jestem ledwo tylko dziabnięty z programowania, więc liczę na każdą pomoc.

 #ifndef TEKST_H
#define TEKST_H
#include <iostream>
#include <string.h>

using namespace std;

class Tekst
{
    public:
        virtual void zadaj()=0;
        virtual void wczytaj()=0;
        string get_tresc();
        void set_tresc(string);
		virtual void sprawdz()=0;
        virtual ~Tekst();
    protected:
        string tresc;



};

#endif // TEKST_H
 #include "Tekst.h"

string Tekst::get_tresc()
{
    return tresc;
}

void Tekst::set_tresc(string tresc)
{
    tresc=tresc;
}

Tekst::~Tekst()
{

}
#ifndef PYTANIE_H
#define PYTANIE_H
#include <string.h>
#include "Tekst.h"

class Pytanie :public Tekst
{
    public:
        Pytanie(int, string, string, string, string, string, string, string, int);
        Pytanie();
        ~Pytanie();
    void zadaj();
    void wczytaj();
	void sprawdz();
    private:
        int nr_pytania;
        string odpowiedz;
        string poprawna;
        string a,b,c,d;
		int punkt;
};

#endif // PYTANIE_H
 
 #include "Pytanie.h"
#include <fstream>
#include <cstdlib>
#include <iostream>


void Pytanie::wczytaj()
{
 fstream plik;
 plik.open("Quis.txt", ios::in);
    if (plik.good()==false)
        {
            cout<<"Nie udalo sie wyswietlic pliku";
            exit (0);
        }
    int nr_linii=(nr_pytania-1)*6+1;
    int aktualny_nr=1;
    string linia;

    while(getline(plik,linia))
    {
        if(aktualny_nr==nr_linii) tresc=linia;
        if(aktualny_nr==nr_linii+1) a=linia;
        if(aktualny_nr==nr_linii+2) b=linia;
        if(aktualny_nr==nr_linii+3) c=linia;
        if(aktualny_nr==nr_linii+4) d=linia;

        aktualny_nr++;
    }

    plik.close();
}

void Pytanie::zadaj()
{
    cout<<endl<<tresc<<endl;
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
    cout<<d<<endl;
    cout<<"------------------------"<<endl;
    cin>>odpowiedz;
}
void Pytanie::sprawdz()
{
	if(odpowiedz==poprawna)
	{
		punkt=1;
	}
	else punkt=0;
}
Pytanie::Pytanie(int nr, string o, string p, string a1, string b1, string c1, string d1, string t, int pkt)
{
nr_pytania=nr;
odpowiedz=o;
poprawna=p;
a=a1;
b=b1;
c=c1;
d=d1;
punkt=pkt;
tresc=t;
}
Pytanie::Pytanie()
{
	 fstream plik;
 plik.open("Quis.txt", ios::in);
    if (plik.good()==false)
        {
            cout<<"Nie udalo sie wyswietlic pliku";
            exit (0);
        }
    int nr_linii=(nr_pytania-1)*6+1;
    int aktualny_nr=1;
    string linia;
}
Pytanie::~Pytanie()
{

}
 #include <iostream>
#include "Pytanie.h"
using namespace std;

int main()
{
	Pytanie p1();
//	p1.wczytaj;
    return 0;
}

No main biedny, bo nie wiem jak te konstruktory rozkręcić, będę wdzięczny za każdą pomoc :)

0
int nr_linii=(nr_pytania-1)*6+1;

pomijam te magic numbery, ale twoje nr_pytania tutaj nie jest zdefiniowane.
Jezeli uwazasz ze jest, to powiedz mi ile wynosi i dlaczego tak a nie inaczej

randomowe formatowanie... tego czytac sie nie da.
co Ty gdzie chcesz zapisac? Bo zadnych danych konkretnych to Ty nie masz, wiec co chcesz zapisac?

a main powinien byc mniejszy niz 5 linijek...

0

int nr_linii=(nr_pytania-1)*6+1;

w funkcji void wczytaj te magic numbery odpowiadają za wczytanie pytania z odpowiedniej linii z pliku ".txt". Tu załączam przykładowy na szybko wymyślony plik z pytaniami.

Natomiast ta sama linia w konstruktorze to w sumie nie za bardzo wiem jak ma działać... Albo nie, wiem jak to ma działać ale nie wiem jak to mam zrobić.

0

ja tam się nie do końca znam ale nie możesz przyjąć argumentu o tej samej nazwie co pole tej klasy...
nr_linii zdefiniowany w jednej funkcji a wykorzystywany w 2...

1 użytkowników online, w tym zalogowanych: 0, gości: 1