Laden...

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

Erstellt von Croctyle vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.042 Views
C
Croctyle Themenstarter:in
3 Beiträge seit 2019
vor 5 Jahren
Wie kann ich mehrere Operatoren bei einem Consolen-Taschenrechner verwenden ohne "Enter" zu drücken?

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:


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;
            }

           
           
            
        
        
    }   
}

4.931 Beiträge seit 2008
vor 5 Jahren

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.

C
Croctyle Themenstarter:in
3 Beiträge seit 2019
vor 5 Jahren

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

4.931 Beiträge seit 2008
vor 5 Jahren

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


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.

C
Croctyle Themenstarter:in
3 Beiträge seit 2019
vor 5 Jahren

Vielen Dank für deine Antwort, damit bin ich ein ganzes Stück weitergekommen ! 😉