switch case erlaubt keine Komma zahlen [GELÖST]
-
Schau dir diese zwei Zeilen mal genau an:
int einwurfint, float preis = 0;
-
ettlFlorian schrieb:
314159265358979 schrieb:
Ich bezweifle, dass es in deinem Programm einen Grund gibt, printf und scanf zu verwenden. Benutze dafür die C++ IO Streams.
das ist nich das Problem, das Problem ist das mir einf Fehler angezeigt wird ds der Preis nicht deklariert ist.
Das ist schon ein Problem. "funktionieren" ist ungleich funktionieren. Nur weil es mit printf und scanf auch funktioniert, heißt das nicht, dass es egal ist. printf und scanf sind aus C übernommen worden und haben einige Problem, die C++ IO Streams nicht haben. Darunter die Ellipse und damit verbunden keine Typsicherheit. Und ich wette mit dir, dass du daurch mal auf die Nase fällst.

Anders sähe es dann wieder mit einem print() mit Variadic Templates aus. Aber das geht jetzt zu weit für diesen Thread.
-
###############################
#So vielen Dank an alle Helfer#
################################include <stdio.h> #include <iostream> using namespace std; int main () { float einwurf = 0; float bisheinwurf = 0; //Summe des bisherigen Einwurfs int einwurfint; float preis = 0; int auswahl, menge = 0; float wechselgeld = 0; printf("\n\nGETRAENKEAUTOMAT V2\n"); printf("Waehlen sie ein Getraenk aus\n\t1 => Bier 2,3 Euro\n\t2 => Mineral 0,5 Euro\n\t3 => Apfelsaft 1,5 Euro\n"); do{//------------------------------prüfung der Auswahl printf("Auswahl: "); scanf("%d", &auswahl); switch(auswahl) { //Zuordnung des Preises case 1: preis = 2.30; break; case 2: preis = 0.50; break; case 3: preis = 1.50; break; default : printf("Die Eingabe ist falsch"); break; } }while(auswahl >=3 && auswahl <= 1); printf("Geben sie an wieviel Stueck sie benötigen.\nMenge: "); scanf("%d", &menge); preis = menge * preis; //Gesampreis printf("\Geben sie %.2f ein.\nes werden keine Scheine ueber 5 Euro und 1 und 2 Centstuecke akzeptiert", preis); do {//-------------------------Einwurfschleife printf("\nEingabe :"); scanf("%f", &einwurf); einwurfint = einwurf * 100; switch (einwurfint) { case 10: break;//do nothing case 20:// break;//do nothing case 50:// break;//do nothing case 100:// break;//do nothing case 200: // break;//do nothing case 5: // break;//do nothing case 500: // break;//do nothing default : if (einwurfint < 500){ printf("Es darf keine Ein- bzw. Zweicentmünze eingeworfen werden"); } else{ printf("Es darf nur ein 5 Euroschein verwenet werden"); }; continue; break; } einwurf = einwurfint ; einwurf = einwurf / 100; bisheinwurf = bisheinwurf + einwurf; if (bisheinwurf < preis){ printf("\nSie haben noch %.2f zu zahlen", preis-bisheinwurf); } }while(bisheinwurf < preis); wechselgeld = (preis-bisheinwurf) *(-1); if (wechselgeld != 0){ printf("Ihr Wechselgeld betraegt %.2f Euro", wechselgeld); } printf("\nBitte entnehmen sie sich ihr Getraenk"); printf("\n\n "); system("pause"); return 0; }Das ist mein Automat
-
Man sollte zum Rechnen mit Währungen keine Fließkommazahltypen benutzen (und in 'echten' Anwendungen darf man das keinesfalls tun), die sind ungenau. Besser: alles mit int - Typen (in Cent) rechnen, und nur bei den Ausgabefunktionen ein Komma an die richtige Stelle bringen.
-
314159265358979 schrieb:
ettlFlorian schrieb:
314159265358979 schrieb:
Ich bezweifle, dass es in deinem Programm einen Grund gibt, printf und scanf zu verwenden. Benutze dafür die C++ IO Streams.
das ist nich das Problem, das Problem ist das mir einf Fehler angezeigt wird ds der Preis nicht deklariert ist.
Das ist schon ein Problem. "funktionieren" ist ungleich funktionieren. Nur weil es mit printf und scanf auch funktioniert, heißt das nicht, dass es egal ist.
Nur dass es nicht egal ist, heisst aber auch nicht dass es ein Problem ist.
-
hustbaer schrieb:
314159265358979 schrieb:
ettlFlorian schrieb:
314159265358979 schrieb:
Ich bezweifle, dass es in deinem Programm einen Grund gibt, printf und scanf zu verwenden. Benutze dafür die C++ IO Streams.
das ist nich das Problem, das Problem ist das mir einf Fehler angezeigt wird ds der Preis nicht deklariert ist.
Das ist schon ein Problem. "funktionieren" ist ungleich funktionieren. Nur weil es mit printf und scanf auch funktioniert, heißt das nicht, dass es egal ist.
Nur dass es nicht egal ist, heisst aber auch nicht dass es ein Problem ist.
Für dieses Programm nicht - Für seine zukünftigen vielleicht schon

-
Was sagt ihr sonst os zu meinen 1. "richtigen" Programm sozusagen.
-
ettlFlorian schrieb:
Was sagt ihr sonst os zu meinen 1. "richtigen" Programm sozusagen.
Ein häßliches Stück C-Code mit C++-Fetzen drin.
Und Du rechnest doch auf Fließkommazahlen. Da kommen Fehler raus.
-
ettlFlorian schrieb:
Was sagt ihr sonst os zu meinen 1. "richtigen" Programm sozusagen.
Pi hat da durchaus Recht. Mit deiner C und C++-Mischung bewegst du dich in eine Richtung in der du nicht glücklich werden wirst. Falls dein Lehrwerk dir das so beibringt, ist es schlecht.
Weiterhin:
- Geld sind keine Fließkommazahlen, wurde schon genannt
- Zeile 46 bis 74 ist ja wohl ultra umständlich um zu prüfen, ob der Einwurf zu einem gültigen Geldstück passt.
- Variablen deklariert man eigentlich erst da wo man sie braucht und dann so lokal wie möglich. Aber sie haben immerhin gute, sprechende Namen
.Alles weitere sind Folgefehler aus den vier genannten Punkten.
Ansonsten: Typisches Programm für jemandem mit deinem Erfahrungsstand: Bisschen umständlich, bisschen unleserlich. Da man sich aber nicht die Mühe geben wird so ein Übungsprogrämmchen toll zu planen ist das normal.
-
ettlFlorian schrieb:
Was sagt ihr sonst os zu meinen 1. "richtigen" Programm sozusagen.
Hast du mal probiert was passiert, wenn jemand ein 17-Cent Stück einwerfen will

-
SeppJ schrieb:
Zeile 7: main muss int zurückgeben
Zeile 10: Semikolon statt Komma
Zeile 13: CENT wird nirgends benutzt
Zeile 25ff: In C++ ist das Dezimaltrennzeichen ein Punkt, kein Komma.
Zeile 42: Es gibt keine Escapesequenz \G
Zeile 78: Du hast den Header cstdlib für system vergessenUnd das ist nur das was mir mein Compiler gesagt hat! Liest du nicht, was dir deiner sagt? Compiliere immer mit allen Warnoptionen und behandle Warnungen wie Fehler. Versuche zu Lernen, die Fehlermeldungen zu verstehen. Nimm das ernst! Dies ist wichtig!
Ist wahrscheinlich wegen Google translate drin... ?