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

Problem, początkujący, program C++
Y1
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:2
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.

n0name_l
Pomysl najpierw co by bylo gdybys obslugiwal 10k produktow? Przy ktorym copy-paste zaczniesz uzywac mozgu?
mwl4
@n0name_l, nie wszystko od razu wszystko umiesz. Prawdopodobnie ta osoba się dopiero uczy języka, a ty od razu rzucasz się. Zrób coś bardziej pożytecznego i przenieś do Newbie.
n0name_l
Ale myslec mozna od poczatku... przenieś do Newbie jakim sposobem ja mam to zrobic?
mwl4
@n0name_l, nie da się od początku myśleć w sposób taki jaki trzeba myśleć. Ano tak, przecież ty nie mod, mój błąd.
DR
@mwl4 zostaw go, n0name_l pozjadał rozumy i urodził się z klawiatura w rękach. Takiego nie przegadasz
mwl4
  • Rejestracja:około 12 lat
  • Ostatnio:19 dni
  • Lokalizacja:Wrocław
  • Postów:399
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:

Kopiuj
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:

Kopiuj
void chleb(float& kasa, float a)

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

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


Asm/C/C++
edytowany 1x, ostatnio: mwl4
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
1

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

Kopiuj
#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;
}

PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.