Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 04:05

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C] Programmier Hilfe

Discussion on [C] Programmier Hilfe within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
Æciid's Avatar
 
elite*gold: 26
Join Date: Aug 2010
Posts: 722
Received Thanks: 260
[C] Programmier Hilfe

Code:
#include<stdio.h>


int auswahlGetraenkeSorte();
int eingabeMenge();
float ermittlePreis(int sorte);
float bezahlen(float zuZahlen);
int pruefeGeldstueck(float muenze);
void ausgabeGetraenke(int sorte, int menge);

int main() {
	printf("Getraenke Automat v0.5\n\n");

	int sorte, menge;
	float preis, zuZahlen, gezahlt;
	
	sorte = auswahlGetraenkeSorte();
	preis = ermittlePreis(sorte);
	menge = eingabeMenge();
	zuZahlen = preis * menge;
	gezahlt = bezahlen(zuZahlen);
	
	if(gezahlt >= zuZahlen) {
		ausgabeGetraenke(sorte, menge);
		printf("\n\nVielen Dank, bitte entnehmen sie ihre Getraenke.\n");
	}else {
		printf("\n\nBezahlvorgang abgebrochen.\n");
		printf("Ausgabe von %.2f Euro.\n", gezahlt);
	}
	
	return 0;
}


int auswahlGetraenkeSorte() {
	int sorte;
	printf("Waehlen sie ihr Getraenk aus:\n");
	printf("1) Wasser (0,50 Euro)\n");
	printf("2) Limonade (1,00 Euro)\n");
	printf("3) Bier (2,00 Euro)\n\n");
	printf("Geben sie 1, 2 oder 3 ein: ");
	scanf("%d", &sorte);
	return sorte;
}

int eingabeMenge() {
	int menge=1;
	printf("\nGeben sie die gewuenschte Menge ein: ");
	scanf("%d", &menge);
	return menge;
}


float ermittlePreis(int sorte) {
	float preis=0;
	switch(sorte) {
		case 1: preis = 0.5; break;
		case 2: preis = 1.0; break;
		case 3: preis = 2.0; break;
	}
	return preis;
}


float bezahlen(float zuZahlen) {
	printf("\n--- Bezahlvorgang ---\n");
	printf("\nBezahlvorgang abbrechen mit 0\n");
	float einwurf, gezahlt=0;
	do {
		printf("\nEs fehlen noch %.2f Euro.", zuZahlen-gezahlt);
		printf("\nBitte werfen sie ein Geldstueck ein: ");
		scanf("%f", &einwurf);

		if(einwurf == 0) {
			break;
		}

		if(pruefeGeldstueck(einwurf))  {
			gezahlt += einwurf;
		}else {
			printf("\nIhr Geldstueck ist ungueltig.");
		}
		
	} while(gezahlt < zuZahlen);

	return gezahlt;
}

int pruefeGeldstueck(float muenze) {	


	int cent = muenze * 100;
	switch(cent) {
		case 5:		return 1;
		case 10:	return 1;
		case 20:	return 1;
		case 50:	return 1;
		case 100:	return 1;
		case 200:	return 1;
		default:	return 0;
	}
}

void ausgabeGetraenke(int sorte, int menge) {
	printf("\n--- Getraenkeausgabe ---\n");
	int i;
	for(i=0; i < menge; i++)  {
		printf("\nFlasche %d von %d der Sorte %d wurde ausgegeben.",
			i+1, menge, sorte);
			

	}
}


So , das Programm funktioniert soweit bis man den Betrag komplett bezahlt , danach schließt es sich ich weiß nicht ob er den letzten teil noch bearbeitet da das Fenster wie gesagt sofort zu geht. Mit system ("PAUSE"); erziele ich auch keine erfolge! Ich bitte um einen denk anstoß !
Æciid is offline  
Old 06/23/2011, 11:53   #2
 
elite*gold: 0
Join Date: Jan 2011
Posts: 144
Received Thanks: 73
Das system ist aber genau das richtige, habe das ganze jetzt kopiert und eingefügt und getestet siehe hier:
Du must natürlich noch #include <iostream> hinzufügen und system("PAUSE"); vor dem return 0 in deiner Main Funktion setzen.
Ronox is offline  
Old 06/23/2011, 12:08   #3
 
Æciid's Avatar
 
elite*gold: 26
Join Date: Aug 2010
Posts: 722
Received Thanks: 260
Quote:
Originally Posted by Ronox View Post
Das system ist aber genau das richtige, habe das ganze jetzt kopiert und eingefügt und getestet siehe hier:
Du must natürlich noch #include <iostream> hinzufügen und system("PAUSE"); vor dem return 0 in deiner Main Funktion setzen.

hm lag dann denke mal am #include .. ist im Buch etwas komplizierter dagestellt -.-


eine weitere frage die ich nicht ganz selbst gelöst bekomme ist das mit dem bezahlen bei mir funzt nur:

00.50
01.00
02.00

obwohl im buch
5
10
20
50
100
200
500

aufgelistet sind mit dem hinweiß * 100 da cent beträge nur wenn ich bei 5 bsp weiße 500 eingebe passiert nichts 00.500 wären dann weider 00.50 und 500.00 im Prinzip 500€
Æciid is offline  
Old 06/23/2011, 12:27   #4
 
black0utCpp's Avatar
 
elite*gold: 0
Join Date: Oct 2010
Posts: 381
Received Thanks: 210
mach mal anstatt float bezahlen ()<-> double bezahlen () das ist besser!
black0utCpp is offline  
Old 06/24/2011, 18:05   #5
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Konsolenprogramme geben die Konsole wieder frei nachdem sie ausgeführt wurden, das ist absichtlich so damit du sie ohne Userinteraktion einfach in Stapelverarbeitungsdateien benützten kannst, außerdem bedient man Konsolenprogramme für gewöhnlich von der Konsole aus, unter Windows wäre das cmd.exe.
Wenn du dennoch das Beenden des Programms hinauszögern möchtest bis der Nutzer eine Taste drückt, dann solltest du lieber auf die getchar Funktion zurückgreifen.
Übrigens solltest du bei Funktionen in C die keine Argumente entgegennehmen ein void zwischen die Klammern schreiben, also "int eingabeMenge(void);" sowohl bei der Deklaration als auch bei der Definition, denn eine leere Argumenten Liste in C heißt dass die Funktion eine beliebige Anzahl an Argumenten entgegen nimmt, mit Funktionen der C-Runtime kann man diese Argumente dann in der Funktion behandeln.

@Ronox
iostream ist kein C Header, du kannst ihn also nicht verwenden wenn du wirklich in C programmierst und was hat system("PAUSE"); bitte mit iostream am Hut?

@blackOutCpp
Weshalb soll denn double generell besser sein als float?
In seinem Fall sollte die Genauigkeit von Float absolut ausreichend sein.
Bot_interesierter is offline  
Thanks
1 User
Old 06/24/2011, 20:27   #6
 
black0utCpp's Avatar
 
elite*gold: 0
Join Date: Oct 2010
Posts: 381
Received Thanks: 210
Man sollte bei Berechnungen immer double benutzen.Auf diesem Niveau ist es vllt egal
aber später kann sich das rächen und die 32 bit mehr oder weniger ...
black0utCpp is offline  
Old 06/24/2011, 20:49   #7
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Quote:
Originally Posted by black0utCpp View Post
Man sollte bei Berechnungen immer double benutzen.Auf diesem Niveau ist es vllt egal
aber später kann sich das rächen und die 32 bit mehr oder weniger ...
Oder im Klartext, du wolltest auch mal was sagen...
Wenn du nichts Sinnvolles zu einem Thema beitragen kannst, dann lass es einfach sein.
Hättest du geschrieben, "für komplexere Berechnungen mit Fließkommazahlen solltest du dann aber double verwenden und wenn es noch genauer sein muss einen Typ aus einer Mathematiklib.", dann wäre dein Beitrag nützlich gewesen, aber so ist es schlicht Nonsense.
Bot_interesierter is offline  
Thanks
1 User
Old 06/25/2011, 00:19   #8
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Use float only, iff:
* you know what you do
* you have the knowledge to fight that beast
* you are willing to fight that beast
* you have a very, very, very good reason to use float
* you have at least 4 times thought the whole thing through and
still come to the conclusion that float would be a good idea in
this specific case.
xNopex is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
WoW-Bot programmier problem
01/08/2011 - WoW Bots - 2 Replies
Hallo Leute, ich habe die letzten Tage angefangen einen kleinen Bot in Autoit zu programmieren mit Waypointnavigation. Ich habe schon ein Grundgerüst von CtM mit Blackmagic.au3 gebastelt doch habe ich ein Problem mit dem Offset da man jetzt ja irgendwie was dazu addieren muss. Die Offset-Daten habe ich mir von MMo geholt. Es wäre toll wenn jemand meinen Bot-source angugen könnte wenn er fast fertig gestellt ist. Mit freundlichen Grüßen MyKnoppers
Suche Programmier
11/30/2010 - Lord of the Rings Online - 1 Replies
Ich suche jemanden der folgenden bot für mich programmiert=Man stellt seinen charakter neben erz und immer wenn das erz respawnt baut der bot es von alleine ab.
Programmier Fragen
10/20/2010 - AutoIt - 3 Replies
Hallo alle zusammen, ich habe einen kleinen Bot gecodet der mit Controlsend arbeitet und wie wir wissen braucht Controlsend den Titel des Fensters und diesen möchte ich in einer ini datei abspeicehr das habe ich nun auch hinbekommen,jedoch wenn ich diesen wärend der Bot an ist ändere und dann speichere muss ich den ganzen bot nochmal aus schalten und wieder an ... Es solle wie dieser Bot sein...
suche bot programmier hilfe !! möchte es lernen
08/29/2010 - Metin2 - 1 Replies
hallo ich bin seit 4 jahren in metin2.de habe viele hackz benutzt gefährlich ist es aber wer hackt weiß was passiern kann soviel ist klar und ich weiß es
C++ Programmier Tutorials
08/01/2010 - C/C++ - 2 Replies
Hallo epvpers! Hallo, ich lern schons eit einiger Zeit C++ und wollt fragen, wie ihr C++ gelernt habt! Habt ihr Bücher benutzt?Oder Online Tutorials? Bitte psotet mal, wie ihr C++ gelernt habt, wenn ihr es gelernt habt ;)



All times are GMT +1. The time now is 04:05.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.