Anfänger braucht hilfe bei C



  • Hallo zusammen

    Ich möchte programmieren lernen und dachte ich fange da mit C an..so weit so gut.. *g* Nur habe ich jetzt ein Problem und suche hilfe. 🙂

    Ich hab von einer Seite, weiss jetzt nicht ob man "Werbung" machen darf. Daher poste ich die Seite nicht. Sonst kann mans immer noch nachträglich machen.

    Es ist ein Beispiel eines Getränkeautomat, denke jedem irgend wie bekannt.
    Nun wollte ich aber sie bisschen "erweitern", indem ich mehrere Ware auswählen kann. Da habe ich das Hauptmenü geschrieben. Es funktioniert eigentlich alles..nur das sich die Menge nicht anrechnet. Es steht immer "0.00".

    Mir kommt es vor, als wüsste er nicht welche Ware * Menge nehmen soll..

    Ich hoffe Ihr könnt mir helfen.

    Gruss Telnarion

    /* Getraenke Automat Version 0.5 */
    
    #include <stdio.h>
    #include "getraenk.h"
    
    // --- Funktions-Prototypen ---------------------------
    int auswahlGetraenkeSorte();
    int eingabeMenge();
    float ermittlePreis(int sorte);
    float bezahlen(float zuZahlen);
    int pruefeGeldstueck(float muenze);
    void ausgabeGetraenke(int sorte, int menge);
    
    // --- Hauptprogramm -----------------------------------------------------------
    int main() {
    	printf("Getraenke Automat v0.5\n\n");
    
    	int sorte, menge, menu;
    	float preis, zuZahlen, gezahlt;
    
    	menu = Hauptmenue();
    	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);
    	}
    	system("PAUSE");
    	return 0;
    }
    //------------------------------------------------------------------------------
    //--------------------------Bezahlvorgang----------------------------------- ///
    
    int Hauptmenue() {
        int menu;
    printf("---Hautptmenue---\n\n");
    printf("Bitte waehlen sie aus:\n\n");
    printf("1) Brot\n");
    printf("2) Fleisch\n");
    printf("3) Getraenk\n");
    printf("4) Administrator\n\n");
    printf("Bitte geben sie 1, 2 oder 3 ein:\n");
    printf("Sind sie Administrator 4. \n-> ");
    scanf("%d", &menu);
    
    printf("\nSie haben %d gewaehlt: \n\n", menu);
    printf("------------------------------------\n\n");
    
    switch(menu) 
    {
    case 1: printf("1) Brot\n");
    break;
    case 2: printf("2) Fleisch\n");
    break;
    case 3: auswahlGetraenkeSorte();
    break;
    case 4: printf("4) Administrator\n\n");
    }
    return menu;
    }
    
    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;
    }
    
    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;
    }
    
    int eingabeMenge() {
    	int menge=1;
    	printf("\nGeben sie die gewuenschte Menge ein: ");
    	scanf("%d", &menge);
    	return menge;
    }
    
    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);
    
    		// Abbruch pruefen
    		if(einwurf == 0) {
    			break;
    		}
    
    		// eingeworfenen Betrag anrechnen
    		if(pruefeGeldstueck(einwurf))  {
    			gezahlt += einwurf;
    		}else {
    			printf("\nIhr Geldstueck ist ungueltig.");
    		}
    
    	} while(gezahlt < zuZahlen);
    
    	return gezahlt;
    }
    
    int pruefeGeldstueck(float muenze) {	
    	// Muenzwert in ganze Zahl umrechnen, also in Cent.
    	// Da die case Anweisung nicht mit floats arbeiten kann.
    	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;
    		case 500:	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);
    	}
    }
    


  • Was passiert mit dem Rückgabewert von auswahlGetraenkeSorte()? Tipp: Er wandert nicht magisch in die Variable sorte in der main().



  • Huhu

    Danke für deine Antwort, ich habe nun.

    "sorte = auswahlGetraenkeSorte();"

    eingefügt und nun geht's. Ich hoffe du hast auch das gemeint. XD

    Ich danke dir viel mal 🙂

    Gruss Telnarion



  • Hmm..

    Zusammenrechnen tut er ja, aber nun muss ich zweimal die Sorte auswählen.

    Kann es am einem Fehler vom Return liegen?

    Gruss Telnarion



  • Ich schätze mal das sorte = ... hast du in der main() eingefügt, oder?
    Und im Hauptmenü rufst du die Funktion auch auf.



  • Hmm...Stimmt

    Also führt er zweimal aus? Einmal automatisch und dann per Eingabe, oder?

    Dann verstehe ich es immer noch nicht, wie ich das ganze nun zusammen rechnen lässt..

    Im "main()" ist "int sorte" drin.

    Irgendwie stehe ich auf dem Schlauch...



  • Du musst irgendwie den Rückgabewert von auswahlGetraenkeSorte() via Hauptmenü in die main() kriegen.
    Oder du machst das einfach komplett anders:
    In der main() rufst du hauptmenue() auf (evtl. auch mit Schleife, sobald hauptmenue 0 oder so zurückgibt.
    hauptmenue() ruft dann verschiedene Funktionen auf, z.B getraenk(). getraenk() ruft auswahlGetraenkeSorte() auf und macht die anderen Kalkulationen, die aktuell in der main() sind.


Anmelden zum Antworten