myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie kann ich mehrere Operatoren bei einem Consolen-Taschenrechner verwenden ohne "Enter" zu drücken?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich mehrere Operatoren bei einem Consolen-Taschenrechner verwenden ohne "Enter" zu drücken?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Croctyle
myCSharp.de-Mitglied

Dabei seit: 07.02.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: Hamburg


Croctyle ist offline

Wie kann ich mehrere Operatoren bei einem Consolen-Taschenrechner verwenden ohne "Enter" zu drücken?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin liebe Leute,

Seit kurzem beschäftige ich mich mit dem Thema Programmierung.
Ich bin gerade dabei klassisch einen Taschenrechner als Consolen Anwendung zu programmieren und habe dabei eine Frage.

Ich möchte in meinem Taschenrechner gerne so rechnen können das ich einfach :
5+5 oder 5-5 usw. eingebe ohne zwischendrin Entern zu müssen um dann die nächste Zahl einzugeben.

Das ist mir soweit auch gelungen, allerdings kann ich mit meiner jetzigen weise nur einen Operator verwenden. Wie bekomme ich es hin das mein Rechner + rechnet wenn ich + eingebe oder wenn ich - eingebe einfach minus gerechnet wird usw.

Vielen Dank für eure Antworten !

meinen Quelltext hänge ich an:

C#-Code:
namespace Test2
{
    class Program
    {
        static void Main(string[] args)
        {



                string gleichung = Console.ReadLine();
                int pos = gleichung.IndexOf("+");
                if (pos <= 0)
                {
                throw new Exception(" Dies ist kein Operator!");
                }


                string wert1 = gleichung.Substring(0, pos);
                int num1 = ConvertNumber(wert1);

                string wert2 = gleichung.Substring(pos + 1);
                int num2 = ConvertNumber(wert2);





                Console.WriteLine(addition(num1, num2));
                Console.WriteLine(subtraktion(num1, num2));
                Console.ReadLine();

        }

           private static int addition(int num1, int num2)
           {

           int ergebnis = num1 + num2;
           return ergebnis;
           }

           private static int subtraktion(int num1, int num2)
           {
            int ergebnis = num1 - num2;
            return ergebnis;
           }

           private static int ConvertNumber(string value)
           {


            int number;
            bool isDouble;

            isDouble = int.TryParse(value, out number);
            if (!isDouble)
            {
            throw new Exception("Keine Zahl:" + value);
            }

            return number;
            }






    }
}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Croctyle am 07.02.2019 15:56.

07.02.2019 15:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.390
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen im Forum,

du müsstest alle möglichen Rechenzeichen nacheinander (per IndexOf) abfragen, und wenn eines gefunden wurde, dann dafür die passende Rechenmethode aufrufen.

Aber gerade bei '+' und '-' kann es damit schon schwierig werden, wenn diese auch als unäre Operatoren benutzt werden, also z.B. -3+2 oder +6-4.

Und für komplexere Formeln ist dieser Ansatz nicht zu empfehlen, daher habe ich den  Parser für mathematische Formeln veröffentlicht.
07.02.2019 17:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Croctyle
myCSharp.de-Mitglied

Dabei seit: 07.02.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: Hamburg

Themenstarter Thema begonnen von Croctyle

Croctyle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hey und vielen dank !

Und natürlich danke für deine schnelle Antwort.

Mir geht es hauptsächlich um den Lerneffekt und da würde ich einfach erstmal gerne wissen wie ich dahin komme das ich + , - , + , / , rechnen kann.

mir wäre fürs erste schon geholfen wenn ich weiß wie ich die Rechenzeichen nacheinander per (IndexOf) abfragen kann so dass ich dann nicht in die Exception laufe die ich dort eingebaut habe.
Ich würde mich über kleines beispiel freuen um verstehen zu können.

Vielen Dank !!
07.02.2019 19:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.390
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du mußt einfach die if-Abfrage umdrehen und mittels else if die anderen Fälle abfragen:

C#-Code:
int pos = gleichung.IndexOf("+");
if (pos >= 0)
{
    string wert1 = gleichung.Substring(0, pos);
    int num1 = ConvertNumber(wert1);

    string wert2 = gleichung.Substring(pos + 1);
    int num2 = ConvertNumber(wert2);

    Console.WriteLine(addition(num1, num2));
}
else if ((pos = gleichung.IndexOf("-")) >= 0)
{
   // Subtraktion
   // ...
}
else
{
    throw new Exception(" Dies ist kein Operator!");
}

Da dies dann eher Copy&Paste-Programmierung ist, solltest du die wiederholenden Teile innerhalb der if-Blöcke als eigene Methode anlegen.

Und die Exceptions solltest du auch fangen (mittels try...catch), da ansonsten das Betriebssystem eine Fehlermeldung bringt.
Daher solltest du bei "Dies ist kein Operator!" besser keine Exception erzeugen, sondern einfach auf der Konsole ausgeben.
07.02.2019 19:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Croctyle
myCSharp.de-Mitglied

Dabei seit: 07.02.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: Hamburg

Themenstarter Thema begonnen von Croctyle

Croctyle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für deine Antwort, damit bin ich ein ganzes Stück weitergekommen ! ;)
12.02.2019 15:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Monate.
Der letzte Beitrag ist älter als 9 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.11.2019 17:21