Zum Inhalt springen
  • 0

Taschenrechner c# console dauerschleife


Schwegelberger

Frage

Hallo, Ich bin relativ weit gekommen mit dem Taschenrechner aber stehe jedes mal vor neuen Herausforderungen. Ich bin dabei meinen Taschenrechner zu optimieren und soll kein einfacher sein. Ich möchte dass der Taschenrechner in Dauerschleife läuft bis der Benutzer off eintippt, jedoch weiß ich nicht wie ich das hinbekommen kann und welche Schleife ich nehmen soll 😕

// Taschenrechner V1.0

            Double zahl1, zahl2, ergebnis;
            Int32 art;

            
                Console.WriteLine("Gib deine erste Zahl ein:");
                zahl1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Gib eine der folgenden Rechenarten ein:");
                Console.WriteLine("1|plus");
                Console.WriteLine("2|minus");
                Console.WriteLine("3|mal");
                Console.WriteLine("4|geteilt");
                Console.WriteLine("5|hoch");
                Console.WriteLine("6|wurzel");
                Console.WriteLine("off");
                art = Convert.ToInt32(Console.ReadLine());

                if (art != 1 && art != 2 && art != 3 && art != 4 && art != 5 && art != 6)
                {
                    Console.WriteLine("Error");
                }

                else
                {
                    if (art == 6)
                    {
                        ergebnis = Math.Sqrt(zahl1);
                        ergebnis = Math.Round(ergebnis, 3);
                        Console.WriteLine("Ergebnis: " + ergebnis);

                    }

                    else
                    {
                        Console.WriteLine("Gib deine zweite Zahl ein:");
                        zahl2 = Convert.ToDouble(Console.ReadLine());

                        if (art == 1)
                        {
                            ergebnis = zahl1 + zahl2;
                            ergebnis = Math.Round(ergebnis, 3);
                            Console.WriteLine("Ergebnis: " + ergebnis);

                        }

                        else if (art == 2)
                        {
                            ergebnis = zahl1 - zahl2;
                            ergebnis = Math.Round(ergebnis, 3);
                            Console.WriteLine("Ergebnis: " + ergebnis);

                        }

                        else if (art == 3)
                        {
                            ergebnis = zahl1 * zahl2;
                            ergebnis = Math.Round(ergebnis, 3);
                            Console.WriteLine("Ergebnis: " + ergebnis);

                        }

                        else if (art == 4)
                        {

                            ergebnis = zahl1 / zahl2;
                            ergebnis = Math.Round(ergebnis, 3);
                            Console.WriteLine("Ergebnis: " + ergebnis);


                        }

                        else if (art == 5)
                        {
                            ergebnis = Math.Pow(zahl1, zahl2);
                            ergebnis = Math.Round(ergebnis, 3);
                            Console.WriteLine("Ergebnis: " + ergebnis);

                        }

                    }
                }
            




            Console.ReadKey();

Ich würde mich sehr auf eine Hilfreiche Antwort freuen und mich herzlich bedanken :) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

8 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Mal ganz unabhängig von deinem Code, da hätte ich nämlich hier und da schon was auszusetzen, mal erklärt wie du diese "Dauerschleife" hinbekommst:

  • Im Einsteigspunkt rufst du eine Methode auf, die du als "Menü" ansehen könntest. Hier forderst du den Benutzer auf Eingaben auf.
  • Dann prüfst du die Eingabe und führst über ne Switch die entsprechende Methode aus (Addieren, Subtrahieren usw.).
  • Statt die Eingaben zu konvertieren, prüfst du im Switch einfach auf den richtigen String, so kannst du auch "off" abfangen und das Programm beenden.
  • Am Ende der jeweiligen Methoden rufst du die Methode für das Menü erneut auf. Vorher nutzt du Console.Clear() um die Konsole zu leeren.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
Am 14.7.2021 um 10:40 schrieb KeeperOfCoffee:

Mal ganz unabhängig von deinem Code, da hätte ich nämlich hier und da schon was auszusetzen, mal erklärt wie du diese "Dauerschleife" hinbekommst:

  • Im Einsteigspunkt rufst du eine Methode auf, die du als "Menü" ansehen könntest. Hier forderst du den Benutzer auf Eingaben auf.
  • Dann prüfst du die Eingabe und führst über ne Switch die entsprechende Methode aus (Addieren, Subtrahieren usw.).
  • Statt die Eingaben zu konvertieren, prüfst du im Switch einfach auf den richtigen String, so kannst du auch "off" abfangen und das Programm beenden.
  • Am Ende der jeweiligen Methoden rufst du die Methode für das Menü erneut auf. Vorher nutzt du Console.Clear() um die Konsole zu leeren.

 

 

            //Taschenrechner V2.0

            Double zahl1, zahl2, ergebnis;
            Int32 art;

            Console.Write("Gib deine erste Zahl ein: ");
            zahl1 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("1 = Addieren");
            Console.WriteLine("2 = Subtrahieren");
            Console.WriteLine("3 = Multiplizieren");
            Console.WriteLine("4 = Dividieren");
            Console.WriteLine("5 = Potenzrechnen");
            Console.WriteLine("6 = Wurzel ziehen");
            Console.Write("Wähle eine Rechenart aus: ");
            art = Convert.ToInt32(Console.ReadLine());
            Console.Write("Gib deine zweite Zahl ein: ");
            zahl2 = Convert.ToDouble(Console.ReadLine());

            switch (art)
            {
                case 1:
                    ergebnis = zahl1 + zahl2;
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                case 2:
                    ergebnis = zahl1 - zahl2;
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                case 3:
                    ergebnis = zahl1 * zahl2;
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                case 4:
                    ergebnis = zahl1 / zahl2;
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                case 5:
                    ergebnis = Math.Pow(zahl1, zahl2);
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                case 6:
                    ergebnis = Math.Sqrt(zahl1);
                    Console.WriteLine("Ergebnis: " + ergebnis);
                    break;

                default:
                    Console.WriteLine("Ungültige eingabe.");
                    Console.Write("Wähle eine Rechenart aus: ");
                    break;
            }

            Console.ReadKey();

Soweit bin ich gekommen, jedoch verstehe ich danach nichts mehr 😕

Könntest du es mir bitte etwas ausführlicher erklären ^^´?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Ich werde jetzt keinen Code für dich posten, du sollst das schon selbst tippen und verstehen^^

Hier kannst du die simple Angehensweise mal nachvollziehen. Gibt sicher andere Wege, das ist aber relativ einfach Quck & Dirty.

Vermutlich würde ich es nicht in statischen Klassen machen, aber darum gehts grad ja nicht.

image.thumb.png.cc236d83d82780c754e84481a2ace4ff.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
Am 14.7.2021 um 10:27 schrieb Schwegelberger:

Dauerschleife läuft bis der Benutzer off eintippt, jedoch weiß ich nicht wie ich das hinbekommen kann und welche Schleife ich nehmen soll 😕

Da gibt es einige möglichkeiten um sowas zu realisieren bsp.

While (true)

Methode() welches rekursiv sich selber aufruft

.....

 

Um die schleife zu verlassen hast du wieder mehrere möglichkeiten

goto => goto (C#-Referenz)

wenn du lustig drauf bist kannst du mit goto anweisung auch eine endlosschfeie realisieren und kontruieren

Lies dir das mal durch Sprunganweisung / Sprungbefehl (( wikipedia ) goto)

 

if(benutzer eingabe == Of  ) {

    break; <= zum beispiel

}

 

Spiele mal  der goto Anweisung hätte auch mega lern effekt

Bearbeitet von Hisoka
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 12 Minuten schrieb Hisoka:

Methode() welches rekursiv sich selber aufruft

Das führt irgendwann zu einem Stapelüberlauf (Stack Overflow) ;)

Du kannst jede Rekursion in eine Schleife umwandeln aber nicht jede Schleife in eine Rekursion.

vor 14 Minuten schrieb Hisoka:

Die 80er haben angerufen und wollen goto zurück haben. ;) Nein, ernsthaft. goto ist eine schlechte wahl. goto sollte man meiden, wie der Teufel das Weihwasser. In Hochsprachen, wie C# nun mal ist, ist die Verwendung von goto unnötig.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 23 Minuten schrieb Whiz-zarD:
vor 43 Minuten schrieb Hisoka:

Methode() welches rekursiv sich selber aufruft

Das führt irgendwann zu einem Stapelüberlauf (Stack Overflow) ;)

Du kannst jede Rekursion in eine Schleife umwandeln aber nicht jede Schleife in eine Rekursion.

Das Sollte doch so sein 😭 ich wolle doch das er einen Stack Overflow hat.

"Oo es hat geklappt aber noch nicht so gut wie ich es wollte" war mein ziel (Lern effekt)

 

Später wollte ich ihm eine OOP lösung andrehen => wo ich ihn wieder geziel auf sachen aufmerksamm gemacht hätte..

Zum Beispiel Large Objekt Heap wollte ihn damit bisschen auf die eier gehen außerdem so lernt man gut.

Mann macht was sieht ooo das war scheiße und versucht es besser hinzu bekommen.

=> ich hatte gehofft das er von alleine drauf komm und sich mit den Internas aus der .net entwicklung beschäftig und sich mal gedanken über den  .NET Garbage Collector (GC) später noch macht.

Ich könnte  ihn auch eine Lösung runter rotzten aber da hat er doch auf langer sich nichts von.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 30 Minuten schrieb Whiz-zarD:
vor 50 Minuten schrieb Hisoka:

Die 80er haben angerufen und wollen goto zurück haben. ;) Nein, ernsthaft. goto ist eine schlechte wahl. goto sollte man meiden, wie der Teufel das Weihwasser. In Hochsprachen, wie C# nun mal ist, ist die Verwendung von goto unnötig.

Ja kann nicht schaden zu wissen das es geht

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...