Problem, początkujący, program C++

0

Cześć,
Mam problem z takim programem:
http://pastebin.com/uTGQDNKV
Program działa poprawnie, jednak nie rozumiem pewnej rzeczy. Po uruchomieniu program wypisuje zawsze "stan twojego konta" jako cyfrę, którą podałem na początku. Ogólny zamysł był taki, że jeżeli coś kupimy, to wiadomo stan konta powinien się zmienić. Przy funkcjach void stan konta się nie zmienia. Natomiast jak funkcje void wrzucę odpowiednio do case'ów, w tedy stan konta zmienia się tak jak powinien. Proszę o wyrozumiałość, gdyż mój poziom umiejętności C++ nie zachwyca.

1

W każdej funkcji, która przyjmuje wartość pieniędzy, jest kopiowany parametr kasa, przez co jeśli go zmienisz w tej funkcji to ta zmienna zostanie tylko w tej funkcji, a jak powrócisz to przed wywołaniem zmienna będzie taka sama.
Rozwiązanie: użycie wskaźników lub referencji.
I wtedy dla użycia wskaźników:

void chleb(float* kasa, float a)
{
...
// Tutaj zmieniasz kasę poprzez odwołanie się przez wskaźnik do zmiennej np.:
* kasa -= 0.5f;
}
wywołanie: 
chleb(&kasa,a);

Dla referencji dopisujesz tylko:

void chleb(float& kasa, float a)

A wywołania, i operacje na kasa są takie same.

Szczerzę mówiąc, to są podstawowe rzeczy.

1

pomyśl żeby zrobić tak, że masz z 1000 produktów a nadal to jakoś chodzi

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	char *name;
	float price;
} product;

product products[] = {
			{"Chleb",2.50},
			{"Batonik",2.00},
			{"Napoj",3.50}
};

void buy_product(const product p, float *cash) {
	(*cash) -= p.price;
}

int main(void) {
	float cash;
	printf("ile zl na start: ");
	scanf("%f",&cash);

	size_t nof_products = sizeof(products)/sizeof(products[0]);
	while(cash>0) {
		printf("masz %.2f zl . co kupujesz \n",cash);

		size_t id;
		for(id=0;id<nof_products;++id) {
			char *name = products[id].name;
			float price = products[id].price;
			printf("[%zu] %s - %.2f zl\n",id,name,price);
		}

		scanf("%zu",&id);
		if(id > nof_products)
			continue;

		buy_product(products[id],&cash);
	}

	printf("wypad\n");

	return 0;
}

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