Rozmiar Tablicy obiektów pobierany dynamicznie.

0

Witam

Mam taki kod

	Pytanie p[5];
	
	int suma = 0;
	for (int i = 0; i <= 9; i++)
	{
		p[i].nr_pytania = i + 1;
		p[i].wczytaj();
		p[i].zadaj();
		p[i].sprawdz();
		suma += p[i].punkt;
	} 

I to działa

Chciałbym teraz przerobić to tak żeby:

 	Pytanie p[liczbe_pobieral_z_metody];
	
3

int [wielkosc] to kiepski pomysł, zaalokuj przez wskaźnik lub użyj vectora.

2
std::vector<Pytanie> p(liczbe_pobieral_z_metody);
//reszta kodu bez zmian
0

Niestety nie działa.
Mam taką metodę która otwiera plik, liczy w nim wiersze i dzieli przez 6.
Po wykonanie ma zwracać

 return liczba_pytan_zPliku /6;

Cała metoda.

int Pytanie::liczba_pytan()
{
	fstream plik;
	plik.open("quiz.txt", ios::in);

	if (plik.good() == false)
	{
		cout << "Nie udalo sie otworzyc pliku!";
		exit(0);
	}

	int liczba_pytan_zPliku = 1;
	string linia;

	while (getline(plik, linia))
	{
		liczba_pytan_zPliku++;
	}

	plik.close();
	
	return liczba_pytan_zPliku /6;
} 

Jak mogę ją wywołać w main i przypisać do zmiennej.
Wynik tego wywołania chciałbym umiescic w

 p[wynik wywolania metody Pytanie::liczba_pytan() - jakas lliczba] 
0

Nie no, skoro potrafisz napisać metodę, nie potrafisz jej wywołać?
w mainie po prostu zrób int num = pytanie.liczba_pytan() - twojaliczba, i potem zrób std::vector<int-czy-co-tam-chcesz>(num).
Ale pod żadnym pozorem nie rób tak int some[num], to sie skompiluje, ale to baardzo kiepowaty pomysł.

0

Zrobiłem tak:

	Pytanie p;
	int x = p.liczba_pytan();
	
	int suma = 0;
	for (int i = 0; i <= x; i++)
	{
		//p[i].nr_pytania = i + 1;
		//p[i].wczytaj();
		//p[i].zadaj();
		//p[i].sprawdz();
		//suma += p[i].punkt;

		p.nr_pytania = i + 1;
		p.wczytaj();
		p.zadaj();
		p.sprawdz();
		suma += p.punkt;

	} 

I to działa, ale czy Możesz zerknąć na kod czy jest ok.

0

Pętla wykonuje sie o jeden raz za dużo. (Chyba że tak ma być, ale z kodu wyrwanego z kontekstu nie wynika zbyt wiele)

#include <iostream>
using namespace std;
// spójrz tu.
int main() {
	int i = 5;
	for(int j=0;j<=i;j++)
	{
		std::cout << j << std::endl;
	}
	return 0;
}
#include <iostream>
// i tu
using namespace std;
int main() {
	int i = 5;
	for(int j=0;j<i;j++)
	{
		std::cout << j << std::endl;
	}
	return 0;
}

Porównaj wyniki.

0

No tak

j<i 

Dziękuje

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