Entwickler-Ecke
Basistechnologien - Problem mit do-while Schleife
maknausd - Sa 07.01.12 01:34
Titel: Problem mit do-while Schleife
tach!
ich hoffe ihr könnt mir weiterhelfen ;) habe ein kleines programm für preis- und mengeneingabe entwickelt. die do-while schleife soll sich dabei solange wiederholen und die eingegebenen mengen mit den preisen berechnen, bis der benutzer die taste "E" zum beenden drückt und das ergebnis bzw. der gesamtpreis ausgegeben wird.
ich verzweifel langsam :(
das ist mein bisheriger code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| string sMenge = "", sEPreis = "", sBeenden = ""; int iMenge = 0; double dEPreis = 0.0, dGesNetto = 0.0, dGesBrutto = 0.0, dMWST = 19, dGesMWST = 0.0;
do { Console.Write("// Bitte Artikelmenge eingeben: "); sMenge = Console.ReadLine(); iMenge = Convert.ToInt32(sMenge);
Console.Write("// Bitte Einzelpreis eingeben: "); sEPreis = Console.ReadLine(); dEPreis = Convert.ToDouble(sEPreis);
Console.WriteLine("_________________________________________________"); }
while (sBeenden == "E"); {
Console.Write("Taste 'E' drücken um zu beenden"); Console.ReadLine();
dGesNetto = dEPreis * iMenge; Console.WriteLine("-> Gesamtpreis Netto: " + dGesNetto + " " + "EUR");
dGesMWST = dGesNetto * dMWST / 100; Console.WriteLine("-> Enthaltene Mehrwertsteuer: " + dGesMWST + " " + "EUR");
dGesBrutto = dGesNetto + dGesMWST; Console.WriteLine("-> Gesamtpreis Brutto: " + dGesBrutto + " " + "EUR"); } |
schon mal vielen dank für eure hilfen!! :)
Moderiert von
Kha: Quote- durch C#-Tags ersetzt
papa69 - Sa 07.01.12 13:41
hallo maknausd,
ohne jetzt deinen Code genau zu studieren, versuch mal die while-Schleife so:
C#-Quelltext
1: 2:
| while (!sBeenden == "E") ... |
und ganz ohne Semikolon !!!! sonst wird das nix
Th69 - Sa 07.01.12 14:49
Hallo maknausd :welcome:
pap69 meinte eher
C#-Quelltext
1: 2: 3: 4:
| while (sBeenden != "E") {
} |
Außerdem mußt du selbstverständlich die Variable "sBeenden" innerhalb der Schleife setzen (sonst hast du eine Endlosschleife):
C#-Quelltext
1:
| sBeenden = Console.ReadLine(); |
Jetzt mußt du nur noch rausfinden, wie er die Schleife sofort verläßt, ohne nochmals das Ergebnis zu drucken. Insbesondere mußt du die Schleife aber logisch abändern, denn bisher erzeugst du immer wieder die gleiche Ausgabe - aber das wirst du sehen, wenn du dein Programm entsprechend angepaßt hast...
maknausd - Sa 07.01.12 15:33
hallo pap69 und Th69!
vielen dank für eure antwort! :)
also die Variable sBeenden habe ich gesetzt, habe jetzt nochmals hin und her probiert, allerdings bin ich mit meiner logik am ende :( ich bin absoluter neuling zum thema programmieren mit c#.. sry! :( und ich möchte ja die schleife mit der taste "E" stoppen und mir dann das ergebnis anzeigen lassen in der konsole, was also berechnet wurde :)
Th69 hat folgendes geschrieben : |
Hallo maknausd :welcome:
pap69 meinte eher
C#-Quelltext 1: 2: 3: 4:
| while (sBeenden != "E") {
} |
Außerdem mußt du selbstverständlich die Variable "sBeenden" innerhalb der Schleife setzen (sonst hast du eine Endlosschleife):
C#-Quelltext 1:
| sBeenden = Console.ReadLine(); |
Jetzt mußt du nur noch rausfinden, wie er die Schleife sofort verläßt, ohne nochmals das Ergebnis zu drucken. Insbesondere mußt du die Schleife aber logisch abändern, denn bisher erzeugst du immer wieder die gleiche Ausgabe - aber das wirst du sehen, wenn du dein Programm entsprechend angepaßt hast... |
Th69 - Sa 07.01.12 16:25
Hallo,
jetzt sehe ich deinen Fehler, nachdem ich nochmals deinen Code komplett angeschaut habe - ich hatte mich von der Antwort von papa69 irritieren lassen.
Du hast ja zuerst eine do-while-Schleife und danach dann einfach einen eigenständigen Block.
Daher mußt du die "Beenden"-Ausgabe und die Abfrage natürlich in die obere Schleife integrieren:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| do { ...
Console.Write("Taste 'E' drücken um zu beenden"); sBeenden = Console.ReadLine();
} while (sBeenden != "E");
|
Um die Zugehörigkeit von "while" bei einer do-while-Schleife besser auszudrücken, wird sie daher meist direkt nach der schließenden Block-Klammer gesetzt (so wie in meinem Code).
Daher vergiß meine Anmerkungen bzgl. der Schleife ;-)
maknausd - Sa 07.01.12 17:29
hi,
danke dir! ich habe das jetzt mal so eingefügt, allerdings wenn ich die Taste 'E' drücke dann beendet er :) das ist schon mal schön und gut!! allerdings soll er ja nicht die komplette konsole gleiche beenden sondern mit E die schleife beenden und das ergebnis anzeigen ohne das man nur kurz das ergebnis sieht und die konsole aber sofort beendet wird.. ich weiß, ich rede vll. etwas zuu kompliziert :( sorry! mein nächstes problem ist, mir ist aufgefallen, das er jetzt nur immer jeweils einzelne artikelmengen und dem einzelpreis berechnet und nicht komplett in der schleife bzw. den gesamtpreis :( verzweiflung ohne ende :(
Th69 - Sa 07.01.12 19:07
Hallo,
daß die Konsole beendet wird, wenn du das Programm aus dem Visual Studio aufrufst, ist normal so.
Entweder mittels Strg+F5 ("Starten ohne Debugging") dein Programm aufrufen, oder aber in die letzte Zeile deiner Main-Methode noch "Console.ReadLine()" einbauen.
Und wenn du die Ausgabe jeweils nach der Eingabe haben willst, dann mußt du diese ebenfalls in die Schleife packen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| do { } while(...); |
Nach welchem Buch oder Tutorial lernst du denn? Oder ist das für die Schule/Uni?
P.S. Die obige Reihenfolge nennt man übrigens auch
EVA-Prinzip [
http://de.wikipedia.org/wiki/EVA-Prinzip]
maknausd - Sa 07.01.12 19:11
danke, das ist für die schule -.- problem ist, das die lehrer absolut unfähig sind das rüberzubringen.. nun darf ich mir das alles nach video-tutorials selbst beibiegen.. *spitze!*
maknausd - Sa 07.01.12 22:12
abend :)
es hat geklappt!!! yeah!!! danke euch für eure hilfen :) suuuper!!!! 8)
mein ergebnis:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| string sMenge = ""; int iMenge = 0; double dEPreis = 0.0, dGesNetto = 0.0, dGesBrutto = 0.0, dMWST = 19, dGesMWST = 0.0;
do { Console.Write("-> Bitte Artikelmenge eingeben: ");
iMenge = Convert.ToInt32(Console.ReadLine());
Console.Write("-> Bitte Einzelpreis eingeben: ");
dEPreis = Convert.ToDouble(Console.ReadLine());
Console.Write("-> Taste e für Ende: "); sMenge = Console.ReadLine();
dGesNetto = dGesNetto + dEPreis * iMenge;
dGesMWST = dGesNetto * dMWST / 100;
dGesBrutto = dGesNetto + dGesMWST; } while (sMenge != "e"); {
Console.WriteLine("_________________________________________________"); Console.WriteLine("Gesamtpreis Netto" + "\t" + "\t" + "\t" + "= " + dGesNetto + " " + "EUR");
Console.WriteLine("+ 19% Mehrwertsteuer" + "\t" + "\t" + "\t" + "= " + dGesMWST + " " + "EUR");
Console.WriteLine("Gesamtpreis Brutto" + "\t" + "\t" + "\t" + "= " + dGesBrutto + " " + "EUR"); }
Console.ReadKey(); |
Moderiert von
Th69: Quote- durch C#-Tags ersetzt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!