C# Mehrmalige Eingabe mit Summe in der Schleife?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Wenn du mehr als einmal nen input haben willst brauchste diese reihenfolge im ablauf:

definition von start und total

while(true) schleife

innerhalb der schleife die abfrage der konsole und deine auswertung. F3 verlässt die schleife mit break

Das wäre es imgrunde schon um das zu erreichen was du möchtest.

Ansonsten: Deine konsolen ausgaben kannste aus der if rausziehen. Das machste sowieso doch jedes mal wenn du eine taste drückst. Und wenn du sie in jeder if clausel drinne hast. Kannste sie auch darunter benutzen.

Abgesehen davon. Ersetz dein gesamtes if/else ding. Durch eine switch anweisung.

z.b.

switch(Userinput.Key){
  case  ConsoleKey.F8:
    //Ausummieren.
  break;
  case Consolekey.F7:
    //aufsummieren
  break;

usw usw
 }

Auch die summierung kannste aus der if/else rausziehen. Das einzige was sich verändert ist ja das Objekt was du aus deiner liste holst. Da könntest du das objekt einfach in ne variable packen die du am ende bearbeitest.

Es geht sogar noch eleganter. Anstatt einer liste verwendest du einfach ein Dictionary. (Eine Map) Als key haste die ConsoleKeys und als values haste die Objekte.

Dann brauchste weder die grosse if/else noch ne switch anweisung. Weil die Keys sind ja direkt an die werte geknüpft. Aber das könnte ggf. ein wenig zuviel für deinen wissenstand sein.

EDIT: hab noch ein fehler endeckt:

die zeile:

total = (start + coinInCent) /100

stimmt nicht.

Spätestens bei der zweiten eingabe wirste bemerken das der dir in total immer nur die zuletzt getätigte eingame anzeigt.

Lass die variable start weg. Und initialisiere total mit 0.

Anschliessend ersetzt du in der zeile start durch total.

Sodas da steht: total = total+ coin in cent

Die /100 lässt du auch weg. Das rechnest du dann vor der ausgabe um.

EDIT 2:

Nutze die while schleife wie borisg sie dargestellt hat. Daran habe ich mal wieder nicht gedacht. Das wäre die korrekte implementierung....


kl4vd14 
Beitragsersteller
 17.10.2022, 17:07

vielen herzlichen Dank für deine ausführliche Antwort! hab jetzt vor das Ganze in switch umzuwandeln, verstehe jedoch nicht wie du es mit dem Rausziehen von Summierungen/Konsolenausgaben meinst... soll es außerhalb vom switch stattfinden? dann müsste die Variable verallgemeinert werden oder? ich weiß nicht genau wie ich das definieren soll :/

0
FouLou  17.10.2022, 17:13
@kl4vd14

Die Variable Total ist doch schon allgemein genug.

Hier mal ein beispiel. (Pseudocode ich erhebe keinen anspruch auf compillierbarkeit)

int32 total = 0
userinput2 = console.readkey();

while(userinput2 != Console.f3){
  //Deine Switch die nur total aufsummiert

//Hier nach der switch dann die ausgabe von Total in der Console.
 }

So meinte ich das in der richtung. In den ifs oder in der switch musst du ja nur dein total erhöhen. Für alles andere ist die if oder die Switch anweisung ja nicht wichtig.

0
kl4vd14 
Beitragsersteller
 17.10.2022, 17:40
@FouLou

also sollte es so beispielsweise passen? dabei passiert jedoch nichts wenn ich die F-Tasten drücke :/

while(userInput2.Key != ConsoleKey.F3)
{
    switch (userInput2.Key)
    {
        case ConsoleKey.F5
        total = total + values[0].CoinInCent;
        userInput2 = Console.ReadLine();
        break;
      
        case ConsoleKey.F6
        ...
    }
}
total = total / 100;
Console.WriteLine("Your Credit: " + total +); 
0
kl4vd14 
Beitragsersteller
 17.10.2022, 17:45
@kl4vd14

ah passt... das Ergebns wird erst ausgegeben, wenn F3 gedrückt wird! Entschuldige mein Unwissen hahah und danke dir nochmal!

0
FouLou  17.10.2022, 17:46
@kl4vd14

Wenn du willst das es jedesmal ausgegeben werden soll. Musst du halt es in die Schleife mit reinpacken.

1

Ich würde folgendes schreiben:

userInput2 = Console.ReadKey();

while(userInput2 != Console.F3) {
  //  deine Anweisungen hier
  userInput2 = Console.ReadKey(); // nächstes Eingabezeichen
}

Dass du überlegen könntest, die lange Kaskade der Fallunterscheidungen durch eine switch-Anweisung zu ersetzen, wurde schon gesagt.

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler