C Funktionen Problem

03/05/2013 10:44 Rullx3#1
Huhu habe ein problem mal wieder undzwar lernen wir in der Schule jetzt funktionen und sollen ein Programm für einen Briefmarken automaten schreiben.
Nun folgendes problem jedes mal sagt mir das programm das irgendwas nicht initialisiert ist obwohl es das ist. Das andere mal hats mir alle werte immer auf 0 gesetzt weil es verlangt hat das ich die sachen auf 0 deklarieren soll -.- hier bisher was ich neu probiert habe, programm zeigt mir nach auswählen der marke ein error report und das P wohl nicht initialisiert wäre..
Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void auswahlBriefmarke(){
	int marke;
	printf("[1.]Postkarte     0,45 Eur\t\t [2.]Maxibrief  2,20 Eur\n");
	printf("[3.]Standartbrief 0,55 Eur\t\t [4.]Paekchen   4,30 Eur\n");
	printf("[5.]Kompaktbrief  0,90 Eur\t\t [6.]Grossbrief 1,45 Eur\n");
	printf("Bitte waehlen sie aus was sie moechten !\n");
	marke=getch();
}
void briefPreis(int preis){
	int p;
	switch(p){
	case '1': preis=0,45;
	case '2': preis=2,20;
	}
	printf("Sie muessen %i zahlen \n",preis);
}


int main(){
	int preis=0,p;
	auswahlBriefmarke();
	briefPreis(preis);
	return 0;
}
Habs soweit nun hinbekommen nur will er mir irgendwie nicht den restbetrag ausrechnen.. ._.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int auswahlBriefmarke(){
	int marke;
	printf("[1.]Postkarte     0,45 Eur\t\t [2.]Maxibrief  2,20 Eur\n");
	printf("[3.]Standartbrief 0,55 Eur\t\t [4.]Paekchen   4,30 Eur\n");
	printf("[5.]Kompaktbrief  0,90 Eur\t\t [6.]Grossbrief 1,45 Eur\n");
	printf("Bitte waehlen sie aus was sie moechten !\n");
	marke=getch();
	fflush(stdin);
	return marke;
}
int briefAnzahl(){
	int anzahl=0;
	printf("Wieviele moechten sie?\n");
	scanf("%i",&anzahl);
	fflush(stdin);
	return anzahl;
}

int  briefPreis(int p ,int a){
	float preis=0;
	switch(p){
	case '1': preis=0.45*a;break;
	case '2': preis=2.20*a;break;
	case '3': preis=0.55*a;break;
	}
	printf("Sie muessen %.2fEuro zahlen \n",preis);
	return preis;
}
float geldEinwurf(){
	float geld=0;
	printf("Wieviel Geld moechten sie einwerfen?: ");
	scanf("%f",&geld);
	fflush(stdin);
	return geld;
}
void verarbeitung(float preis, float geld){
	float rest;
	rest=preis-geld;
	printf("Sie haben %.2f Eur uebrig ",rest);
}


int main(){
	float preis=0,geld=0;
	int p,a,g,b;

	p = auswahlBriefmarke();
	a = briefAnzahl();
	b = briefPreis(p,a);
	g = geldEinwurf();
	verarbeitung(preis,geld);
	system("PAUSE");
	return 0;
}
03/05/2013 14:16 Schlüsselbein#2
Was mir beim Überfliegen aufgefallen ist.
In briefPreis(int, int) vergleichst du im switch mit einem char. Lass die Anführungsstriche weg.
03/05/2013 16:31 Rullx3#3
ja aber mit dem getch wird ja ein tastendruck erfrasst und da diese eine zahl sind würde ohne die ' ' nichts passieren weils wie ein zeichen ist.. :/
03/05/2013 17:08 Schlüsselbein#4
Ja, stimmt. Dann übergeb als Parameter auch einen char - das verwirrt sonst nur. Auch wenn ein char im Prinzip ein int ist und es deswegen keine Fehler gibt.
03/05/2013 17:25 xNopex#5
Code:
int main(){
	float preis=0,geld=0;
	int p,a,g,b;

	p = auswahlBriefmarke();
	a = briefAnzahl();
	b = briefPreis(p,a);
	g = geldEinwurf();
	verarbeitung(preis,geld);
	system("PAUSE");
	return 0;
}
Beim Aufruf von "verarbeitung" sind "preis" und "geld" jeweils 0.

EDIT:
Code:
int  briefPreis(int p ,int a){
	float preis=0;
	switch(p){
	case '1': preis=0.45*a;break;
	case '2': preis=2.20*a;break;
	case '3': preis=0.55*a;break;
	}
	printf("Sie muessen %.2fEuro zahlen \n",preis);
	return preis;
}
Hier gehen auf jeden Fall Informationen verloren. "preis" ist float Rückgabewert der Funktion ist jedoch "int". Soweit ich mich erinnere werden hier die Nachkommastellen abgeschnitten?
Dazu möchte ich darauf hinweisen, Funktionen in C ohne Parameter mit einem void zu versehen:
Code:
int foo(void)