Zum Inhalt springen

FordPrefect

Mitglieder
  • Gesamte Inhalte

    4
  • Benutzer seit

  • Letzter Besuch

  1. Gut, dank eurer Hilfe konnte ich das Problem lösen, danke! Jetzt tut sich ein zweites auf. Ich habe es so programmiert, dass wenn zu viel Geld eingegeben wurde, Geld aus wechsel in kapital geht. Funktioniert auch ganz prima, aber nur, wenn man mit den Münzen aus wechsel auch das Restgeld "zusammenbauen" kann. Als Beispiel: Der Kaffee kostet 60 Cent, es wird 1 Euro (also 100 Cent) eingeworfen. Wenn jetzt 4 * 10 Cent, 2 * 20 Cent oder 2 * 10 Cent und 1 * 20 Cent in wechsel vorhanden sind klappt die ausgabe wunderbar. Wenn jedoch nur 1 * 50 Cent drin ist bleibt die Schleife stehen. Kann mir jemand einen Tipp geben, wie ich vorher abfragen kann, ob genug Wechselgeld vorhanden ist? Ich hab das schon mit Schleifen probiert, aber es nicht richtig hinbekommen. for(i=0;i<4;i++) { for(r=1;r<4;r++) { if ((wechsel.menge * wechsel.wert) - wechselgeld >= 0 || (wechsel[r].menge * wechsel[r].wert) - wechselgeld >= 0 || wechselgeld / (wechsel.menge * wechsel.wert) + (wechsel[r].menge * wechsel[r].wert) <= 1) { so hab ich die schleife gebaut Anbei mal der ganze Code #include <stdio.h> // Geld typedef struct { char name[15]; // Name des Geldstücks int wert; // Wert int menge; // Anzahl } geld; // Kaffeerezepte typedef struct { char name[15]; // Name int becher; // Becher int milch; // Milch in ml int kaffee; // Kaffee in gr int kakao; // Kakaopulver in gr } kaffeerezept; // Bestand typedef struct { char name[15]; int anzahl; } bestand; geldeingabe (preis) { //Kaffeearray kaffeerezept rezept[4]={ {"Kaffee",1,0,250,0}, {"Cappucino",1,125,125,0}, {"Esspresso",1,0,100,0}, {"Kakao",1,250,0,25}, }; // KapitalArray (Geld des Benutzers) geld kapital[5]={ {"Zehn Cent",10,0}, // Array Speicher 0 {"Zwanzig Cent",20,0}, // Array Speicher 1 {"Fünfzig Cent",50,0}, {"Ein Euro",100,0}, {"Zwei Euro",200,0} // Array Speicher 4 }; // Geld, welches eingeworfen wurde aber noch nicht in die Kasse übergegangen ist geld automat[5]={ {"Zehn Cent",10,0}, // Array Speicher 0 {"Zwanzig Cent",20,0}, // Array Speicher 1 {"Fünfzig Cent",50,0}, {"Ein Euro",100,0}, {"Zwei Euro",200,0} // Array Speicher 4 }; // Kasse (Einnahmen) geld kasse[5]={ {"Zehn Cent",10,0}, // Array Speicher 0 {"Zwanzig Cent",20,0}, // Array Speicher 1 {"Fünfzig Cent",50,0}, {"Ein Euro",100,0}, {"Zwei Euro",200,0} // Array Speicher 4 }; // Kasse (Einnahmen) geld wechsel[5]={ {"Zehn Cent",10,0}, // Array Speicher 0 {"Zwanzig Cent",20,0}, // Array Speicher 1 {"Fünfzig Cent",50,0}, {"Ein Euro",100,0}, {"Zwei Euro",200,0} // Array Speicher 4 }; FILE * kapital_datei; // Vorhandenes Geld FILE * wechsel_datei; // Vorhandenes Wechselgeld FILE * kasse_datei; // Einnahmen FILE * automat_datei; // Einnahmen FILE * bestand_datei; // Kaffebestand int i; // Zählvariable; int geldeingabe; // Für die Geldstückauswahl int geldeingezahlt = 0; // Eingezahltes Geld int wechselgeld = 0; int geldwertinsg; int geldwertinsg_temp; kapital_datei=fopen("kapital.dat","r"); for(i=0;i<5;i++) { fscanf(kapital_datei, "%d", &kapital[i].menge); } fclose(kapital_datei); for(i=0;i<5;i++) // Prüfe ob Geld üerhaupt reicht { geldwertinsg_temp =kapital[i].menge * kapital[i].wert; geldwertinsg = geldwertinsg + geldwertinsg_temp; } if (geldwertinsg < 60) { printf("Sie haben nicht genug Geld!"); } else { printf("Werfen sie bitte %d Cent ein.\n", preis); printf("1 für 10 Cent. Sie haben %d 10 Centmünzen\n", kapital[0].menge); printf("2 für 20 Cent. Sie haben %d 20 Centmünzen\n", kapital[1].menge); printf("3 für 50 Cent. Sie haben %d 10 Centmünzen\n", kapital[2].menge); printf("4 für 1 Euro. Sie haben %d 1 Euromünzen\n", kapital[3].menge); printf("5 für 2 Euro. Sie haben %d 2 Euromünzen\n", kapital[4].menge); /* printf("6 um die Geldeingabe abzubrechen und ein anderes Getränk zu wählen\n"); Funktioniert noch nicht */ do { scanf("%d", &geldeingabe); kasse_datei=fopen("kasse.dat", "r"); // Kasse wird kontrolliert for(i=0;i<5;i++) fscanf(kasse_datei, "%d", &kasse[i].menge); fclose(kasse_datei); kapital_datei=fopen("kapital.dat", "r"); // Kapital wird kontrolliert for(i=0;i<5;i++) fscanf(kapital_datei, "%d", &kapital[i].menge); fclose(kapital_datei); switch (geldeingabe) // Geld wird aus dem Kapital entnommen und in den Automaten gegeben { case 1: if (kapital[0].menge <= 0) printf("Keine 10 Centmünzen vorhanden!"); else { geldeingezahlt = geldeingezahlt + 10; automat[0].menge = automat[0].menge + 1; kapital[0].menge = kapital[0].menge -1; } break; case 2: if (kapital[1].menge <= 0) printf("Keine 20 Centmünzen vorhanden!"); else { geldeingezahlt = geldeingezahlt + 20; automat[1].menge = automat[1].menge + 1; kapital[1].menge = kapital[1].menge -1; } break; case 3: if (kapital[2].menge <= 0) printf("Keine 50 Centmünzen vorhanden!"); else { geldeingezahlt = geldeingezahlt + 50; automat[2].menge = automat[2].menge + 1; kapital[2].menge = kapital[2].menge -1; } break; case 4: if (kapital[3].menge <= 0) printf("Keine 1 Euromünzen vorhanden!"); else { geldeingezahlt = geldeingezahlt + 100; automat[3].menge = automat[3].menge + 1; kapital[3].menge = kapital[3].menge -1; } break; case 5: if (kapital[4].menge <= 0) printf("Keine 2 Euromünzen vorhanden!"); else { geldeingezahlt = geldeingezahlt + 200; automat[4].menge = automat[4].menge + 1; kapital[4].menge = kapital[4].menge -1; } break; /* case 6: printf("Sie haben die Geldeingabe abgebrochen."); default: printf("Falsche Zahl angegeben!\n"); läiuft noch nicht */ } kapital_datei=fopen("kapital.dat", "w+b"); // Kapital wird aktuallisiert for(i=0;i<5;i++) fprintf(kapital_datei, "%d\n", kapital[i].menge); fclose(kapital_datei); if (geldeingezahlt > preis) { printf("Sie haben %d Cent eingegeben und bekommen %d zurück.\n", geldeingezahlt, (geldeingezahlt -preis)); wechselgeld = geldeingezahlt - preis; wechsel_datei=fopen("wechsel.dat", "r"); // Wechselgeld wird kontrolliert for(i=0;i<5;i++) fscanf(kasse_datei, "%d", &wechsel[i].menge); fclose(wechsel_datei); while(wechselgeld != 0) { for(i=0;i<5;i++) { if (wechsel[i].menge == 0) {} else { if (wechsel[i].wert > wechselgeld) {} else { wechselgeld = wechselgeld - wechsel[i].wert; wechsel[i].menge = wechsel[i].menge -1; kapital[i].menge = kapital[i].menge +1; } } // 1. else } // for } // while kapital_datei=fopen("kapital.dat", "w+b"); // Geld in kapital gespeichert for(i=0;i<5;i++) fprintf(kapital_datei, "%d\n", kapital[i].menge); fclose(kapital_datei); wechsel_datei=fopen("wechsel.dat", "w+b"); // Geld in Kasse gespeichert for(i=0;i<5;i++) fprintf(wechsel_datei, "%d\n", wechsel[i].menge); fclose(wechsel_datei); } else { if ((preis - geldeingezahlt) != 0) { printf("Sie haben %d Cent eingegeben. \n Es fehlen noch %d Cent\n", geldeingezahlt, (preis - geldeingezahlt)); } else { printf("Sie haben %d Cent eingegeben. Ihr Getränk kommt ...\n\n" ,geldeingezahlt); } } } // erstes do while (geldeingezahlt < preis); for(i=0;i<4;i++) { kasse[i].menge = kasse[i].menge + automat[i].menge; // Geld wird aus dem Automaten in die Kasse gegeben } kasse_datei=fopen("kasse.dat", "w+b"); // Geld in Kasse gespeichert for(i=0;i<5;i++) fprintf(kasse_datei, "%d\n", kasse[i].menge); fclose(kasse_datei); } // else, wenn genug geld da ist } main() { FILE * kapital_datei; // Vorhandenes Geld FILE * wechsel_datei; // Vorhandenes Wechselgeld FILE * kasse_datei; // Einnahmen FILE * bestand_datei; // Kaffebestand // Bestandarry bestand bestand_array[4]={ {"Becher",0}, {"Kaffepulver",0}, {"Milch",0}, {"Kakaopulver",0}, }; int i; // Zählvariable; int kwahl; int preis; const int KAFFEEPREIS = 60; const int CAPPUCINOPREIS = 90; // do { printf ("Willkommen bei Starbucks\n"); //hrhr, irre komisch ... printf ("Wählen Sie ein Getränk. Geben Sie ein:\n"); printf ("\n 1 für Kaffee\n 2 für Cappucino\n 3 für Esspresso\n 4 für Kakao\n\n"); // Bestand laden bestand_datei=fopen("bestand.dat", "r"); for(i=0;i<4;i++) fscanf(bestand_datei, "%d", &bestand_array[i].anzahl); fclose(bestand_datei); scanf("%d", &kwahl); switch(kwahl) { case 1: printf("Sie haben Kaffee gewählt.\n"); // Materialcheck Kaffe preis = KAFFEEPREIS; if (bestand_array[0].anzahl < 1) { printf("Leider keine Becher vorhanden!\n"); } else if (bestand_array[2].anzahl < 250) { printf("Zutaten nicht ausreichend vorhanden!\n"); } else { geldeingabe(preis); bestand_array[0].anzahl = bestand_array[0].anzahl -1; // Bestand der Zutaten verringern bestand_array[2].anzahl = bestand_array[2].anzahl -250; bestand_datei=fopen("bestand.dat", "w+b"); // neuen Bestand speichern for(i=0;i<4;i++) fprintf(bestand_datei, "%d\n", bestand_array[i].anzahl); fclose(bestand_datei); } break; case 2: printf("Sie haben Cappucino gewählt.\n"); // Materialcheck Cappucino preis = CAPPUCINOPREIS; if (bestand_array[0].anzahl < 1) { printf("Leider keine Becher vorhanden!\n"); } else if ((bestand_array[2].anzahl < 125) || bestand_array[1].anzahl < 125) { printf("Zutaten nicht ausreichend vorhanden!\n"); } geldeingabe(preis); break; } // } // while ( 1 ); lässt das ganze immer wieder ablaufen return 0; } [/PHP]
  2. Ah, wenn ich geldeingabe(preis) { ... } nehme und preis als integer in main() deklariere funktioniert's. Danke. Also sage ich damit quasi geldeingabe() das es die Variable preis aus main() übernehmen soll?
  3. Warum sollte die Variabel nicht global sein? Das mit dem Parameter versteh' ich nicht, muss ich noch nachlesen.
  4. Hallo Leute. Ich bin noch recht neu in C und stoße jetzt auf ein Problem. Im folgenden Programm soll nach der Auswahl die Variable preis den Wert unterschiedlicher Konstanten (je nach Wahl) enthalten. Allerdings wird kein Wert übermittelt und ich kann den Fehler einfach nicht finden. #include <stdio.h> // Geld typedef struct { char name[15]; // Name des Geldstücks int wert; // Wert int menge; // Anzahl } geld; // Kaffeerezepte typedef struct { char name[15]; // Name int becher; // Becher int milch; // Milch in ml int kaffee; // Kaffee in gr int kakao; // Kakaopulver in gr } kaffeerezept; // Bestand typedef struct { char name[15]; int anzahl; } bestand; int geldeingabe () { //Kaffeearray kaffeerezept rezept[4]={ {"Kaffee",1,0,250,0}, {"Cappucino",1,125,125,0}, {"Esspresso",1,0,100,0}, {"Kakao",1,250,0,25}, }; // GeldArray geld kapital[5]={ {"Zehn Cent",10,0}, // Array Speicher 0 {"Zwanzig Cent",20,0}, // Array Speicher 1 {"Fünfzig Cent",50,0}, {"Ein Euro",100,0}, {"Zwei Euro",200,0} // Array Speicher 4 }; FILE * kapital_datei; // Vorhandenes Geld FILE * wechsel_datei; // Vorhandenes Wechselgeld FILE * kasse_datei; // Einnahmen FILE * bestand_datei; // Kaffebestand int i; // Zählvariable; int geldeingabe; // Für die Geldstückauswahl int geldeingezahlt = 0; // Eingezahltes Geld int wechselgeld = 0; int preis; printf("Werfen sie bitte %d Cent ein.\n", preis); kapital_datei=fopen("kapital.dat","r"); for(i=0;i<5;i++) fscanf(kapital_datei, "%d", &kapital[i].menge); fclose(kapital_datei); printf("1 für 10 Cent. Sie haben %d 10 Centmünzen\n", kapital[0].menge); printf("2 für 20 Cent. Sie haben %d 20 Centmünzen\n", kapital[1].menge); printf("3 für 50 Cent. Sie haben %d 10 Centmünzen\n", kapital[2].menge); printf("4 für 1 Euro. Sie haben %d 1 Euromünzen\n", kapital[3].menge); printf("5 für 2 Euro. Sie haben %d 2 Euromünzen\n", kapital[4].menge); do { scanf("%d", &geldeingabe); switch (geldeingabe) { case 1: geldeingezahlt = geldeingezahlt + 10; break; case 2: geldeingezahlt = geldeingezahlt + 20; break; case 3: geldeingezahlt = geldeingezahlt + 50; break; case 4: geldeingezahlt = geldeingezahlt + 100; break; case 5: geldeingezahlt = geldeingezahlt + 200; break; default: printf("Falsche Zahl angegeben!\n"); } if (geldeingezahlt > preis) { printf("Sie haben %d Cent eingegeben und bekommen %d zurück.\n", geldeingezahlt, (geldeingezahlt -preis)); wechselgeld = geldeingezahlt - preis; } else { printf("Sie haben %d Cent eingegeben. \n Es fehlen noch %d Cent\n", geldeingezahlt, (preis - geldeingezahlt)); } } while (geldeingezahlt < preis); printf("%d", wechselgeld); } int main () { FILE * kapital_datei; // Vorhandenes Geld FILE * wechsel_datei; // Vorhandenes Wechselgeld FILE * kasse_datei; // Einnahmen FILE * bestand_datei; // Kaffebestand // Bestandarry bestand bestand_array[4]={ {"Becher",0}, {"Kaffepulver",0}, {"Milch",0}, {"Kakaopulver",0}, }; int i; // Zählvariable; int kwahl; int preis; const int KAFFEEPREIS = 60; const int CAPPUCINOPREIS = 90; printf ("Willkommen bei Starbucks\n"); //hrhr, irre komisch ... printf ("Wählen Sie ein Getränk. Geben Sie ein:\n"); printf ("\n 1 für Kaffee\n 2 für Cappucino\n 3 für Esspresso\n 4 für Kakao\n\n"); // Bestand laden bestand_datei=fopen("bestand.dat", "r"); for(i=0;i<4;i++) fscanf(bestand_datei, "%d", &bestand_array[i].anzahl); fclose(bestand_datei); scanf("%d", &kwahl); switch(kwahl) { case 1: printf("Sie haben Kaffee gewählt.\n"); // Materialcheck Kaffe preis = KAFFEEPREIS; if (bestand_array[0].anzahl < 1) { printf("Leider keine Becher vorhanden!\n"); } else if (bestand_array[2].anzahl < 250) { printf("Zutaten nicht ausreichend vorhanden!\n"); } geldeingabe(); break; case 2: printf("Sie haben Cappucino gewählt.\n"); // Materialcheck Cappucino preis = CAPPUCINOPREIS; if (bestand_array[0].anzahl < 1) { printf("Leider keine Becher vorhanden!\n"); } else if ((bestand_array[2].anzahl < 125) || bestand_array[1].anzahl < 125) { printf("Zutaten nicht ausreichend vorhanden!\n"); } geldeingabe(); break; } return 0; }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...