[ C++ ] Pobieranie danych z tablicy poprzez c-struktury

0


#include <iostream>
#include <string>
using namespace std;

enum Banks { PKO, BGZ, BRE, BPH };

struct Account {
	Banks bank;
	int balance;
};
struct Person {
	string name;
	Account account;
};
struct Couple {
	Person he;
	Person she;
};
//const Couple* bestClient(const Couple* cpls,
//	int size, Banks bank) {
	// ...
//}
int main() {
	using std::cout; using std::endl;
	Couple cpls[] = {
		{ { "John",{ PKO,1200 } },{ "Marry",{ BGZ,1500 } } },
		{ { "Peter",{ BGZ,1300 } },{ "Suzy",{ BRE,1300 } } },
		{ { "Kevin",{ PKO,1600 } },{ "Katy",{ BPH,1500 } } },
		{ { "Kenny",{ BPH,1800 } },{ "Lucy",{ BRE,1700 } } },
	};
	//const Couple* p = bestClient(cpls, 4, BGZ);
	//cout << p->he.name << " and " << p->she.name
	//	<< ": " << p->he.account.balance +
	//	p->she.account.balance << endl;
	

	system("pause");
}

I jak teraz mam przy użyciu tych struktur dostać się do poszczególnych danych z tablicy w funkcji

//const Couple* bestClient(const Couple* cpls,
//	int size, Banks bank) {
	// ...
//}

nigdzie znaleźć nie mogę jak obsługiwać taką tablice, znalazłem tylko pod pojedyncze obiekty .

1

Zamiast zapisu ze wskaźnikiem lepiej byłoby tak:

const Couple* bestClient(const Couple cpls[], int size, Banks bank) { }

Wtedy jasne jest że do funkcji będzie przekazywana tablica.

Żeby dostać się do danych wystarczy:

cpls[INDEX].he.account;
cpls[INDEX].she;
// i tak dalej.
0

Nie działa mi ;[
chciałem na wypisywaniu sprawdzić jakie mi dane pobierze funkcją

void Wypisz(const Couple cpls[],int size) 
{ 
	
	for (int i = 0; i < size; i++)
	{
		cout << cpls[i].he.name;
		cout << cpls[i].she.name;
	}
	
};
a w int main wywołuje ją

Wypisz(cpls[],4);

Błąd (aktywny) E0029 oczekiwano wyrażenia i wskazuje na cpls[]

Nie rozumiem na jakiej zasadzie struktura

struct Couple 
{
	Person he;
	Person she;
};

wiedzą którą informacje z pary { { "John",{ PKO,1200 } },{ "Marry",{ BGZ,1500 } } } mają pobrać.
tylko tego mi brakuje, później już sprawdzanie czy bank zgodny z tym w wywołaniu
i wywołanie pary która ma najwięcej razem oszczędności znajdę i wypisze prostymi ifami ;]

1

Nie powinno być średnika po klamrze zamykającej funkcję, jednak to nie jest problem.

Skąd wiedzą? Sam im przypisujesz. Ten zapis:

Couple couple = { "John", { PKO, 1200 }, {"Marry", {BGZ, 1500}} };

znaczy to samo co to:

Couple couple;
couple.he.name = "John";
couple.he.account.bank = PKO;
couple.he.account.balance = 1200;
couple.she.name = "Marry";
couple.she.account.bank = BGZ;
couple.she.account.balance = 1500;

Ale nie jestem w stanie stwierdzić co jest przyczyną błędu. U mnie taka konstrukcja działa bez problemu:

void wypisz(const Couple cpls[], int size)
{
	for (int i = 0; i < size; i++)
	{
		cout << cpls[i].he.name << endl;
		cout << cpls[i].she.name << endl;
	}
}
0

Znalazłem w wywołaniu funkji dałem

wypisz(cpls[],4);

a powinienem był dać :

wypisz(cpls,4);

Mały błąd a ile szukania.

0
#include <iostream>
#include <string>
using namespace std;

int na = 0;
Couple cplss[1];
enum Banks { PKO, BGZ, BRE, BPH };


struct Account {
	Banks bank;
	int balance;
};
struct Person {
	string name;
	Account account;
};
struct Couple {
	Person he;
	Person she;
};



const Couple* bestClient(const Couple cpls[], int size, Banks bank)
{
	//sprawdza czy para posiada w banku bank i sumuje  konta
	int i = 0;
	
	int suma_kont[4];
	for (int i = 0; i < size; i++)
	{
		if ((bank == cpls[i].he.account.bank) || (BGZ == cpls[i].she.account.bank)) //warunek przynajmniej jeden bank=przzypisany w wywołaniu
		{
			suma_kont[i] = cpls[i].he.account.balance + cpls[i].she.account.balance;
		}
		else
		{
			suma_kont[i] = 0;
		}
	}
	int max = 0;
	i = 0;
	//wylicza ile ma najbogatrza para
	for (int i = 0; i < size; i++)
	{
		while (suma_kont[i]>=max)
		{
			max = suma_kont[i];
		}
	}
	//znajduje najbogatszą pare
	
	for (int i = 0; i < 4; i++)
	{
		if (suma_kont[i] == max)
		{
			cplss[0] = cpls[i];
		}
	}
	return cplss[0] ; //zwraca cpls by móc urzyc  p->he.account.balance(nie zwraca)
}


int main() {
	using std::cout; using std::endl;
	Couple cpls[]= {
		{ { "John",{ PKO,1200 } },{ "Marry",{ BGZ,1500 } } },
		{ { "Peter",{ BGZ,1300 } },{ "Suzy",{ BRE,1300 } } },
		{ { "Kevin",{ PKO,1600 } },{ "Katy",{ BPH,1500 } } },
		{ { "Kenny",{ BPH,1800 } },{ "Lucy",{ BRE,1700 } } },
	};
		
	const Couple* p = bestClient(cpls, 4, BGZ);
	cout << p->he.name << " and " << p->she.name;
	cout << ": " << p->he.account.balance + p->she.account.balance << endl;
	
	system("pause");
}

Nie wiem czemu mi nie chce zwrócić skopiowanej tablicy ;[

1

Bo nie zwracasz wskaźnika na ten element a jego wartość.
Możesz zrobić

return &cplss[0];

albo prościej

return cplss;
0
atmal napisał(a):

Bo nie zwracasz wskaźnika na ten element a jego wartość.
Możesz zrobić

return &cplss[0];

albo prościej

return cplss;

Dzięki, odpala mi program tylko nic nie wyświetla a kompilator nie widzi ani błędów ani ostrzeżeń. Z deszczu pod rynnę wpadłem ;[

1

Masz niekończącą się pętlę w bestClient:

for (int i = 0; i < size; i++)
{
	if (suma_kont[i] >= max)
	{
		max = suma_kont[i];
	}
}
0
atmal napisał(a):

Masz niekończącą się pętlę w bestClient:

for (int i = 0; i < size; i++)
{
	if (suma_kont[i] >= max)
	{
		max = suma_kont[i];
	}
}

przekombinowałem z tym while
zmieniłem na

for (int i = 0; i < size; i++)
	{
		if (suma_kont[i] > max) max = suma_kont[i];
	}

Wszystko działa ;] Wielkie dzięki za pomoc ;]

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