Art Taschenrechner programmieren

OP #3623977
Lesenswert?

Hallo,

ein Kumpel programmiert gerade eine Art Taschenrechner in C. Dies macht 
er mit Schleifen. Diese läuft solange, bis eine Taste gedrückt wurde.

Aus anderen Sprachen kenne ich das, dass erst nach Eingabe (hier z.B. 
ein Tastendruck) etwas ausgeführt wird. Ist das grundsätzlich bei C 
möglich?

else if Schleifen finde ich fürn sein Projekt unschön.

Für Hilfe schon mal im Vorraus Danke!
Gast #3624209
Lesenswert?

Es gibt natürlich hunderte von Möglichkeiten so etwas anzugehen. Die 
grundsätzliche Problematik hierbei ist die etwas höhere Komplexität der 
Auswertung. Die Gurus werden wohl sagen: Was soll das denn, es gibt doch 
fertige Parser?
Dazu ein einfaches Beispiel:

1 + 1 = "Ich weiß, nicht übermäßig Kompliziert".

Das obige Beispiel sollte aber auch, unter vielem Anderen, umfassen:
a) 1 =
b) 1 + 1 + 1 (...) =
c) Natürlich dürfen auch die anderen, implementierten Rechenbefehle 
kommen.

Es muss das ganze Programm zur Erfassung einer Zahl (Vorzeichen, Komma 
bzw. Punkt, Exponent [+/-]) abgespult werden. Sogar das Ende einer Zahl 
zu erkennen kann Probleme erzeugen.

Dann kommt noch die Befehlserkennung (+, -, *, /, usw.) hinzu.

Ein bisschen Überprüfung kann auch nicht schaden.

Also aus den wenigen, nur angedeuteten Problemen kannst Du ersehen, dass 
die eine oder andere Abfrage nicht schaden kann. Ob Du dazu einen Käse 
oder ein if benutzt, ist eigentlich nebensächlich.
Gast #3625594
Lesenswert?

Mr Dee schrieb:

> ein Kumpel programmiert gerade eine Art Taschenrechner in C. Dies macht
> er mit Schleifen. Diese läuft solange, bis eine Taste gedrückt wurde.
>
> Aus anderen Sprachen kenne ich das, dass erst nach Eingabe (hier z.B.
> ein Tastendruck) etwas ausgeführt wird.

Du meinst "ereignisorientierte Programmierung".

> Ist das grundsätzlich bei C
> möglich?

Das ist völlig sprachunabhängig. Deine Fehleinschätzung rührt daher, das 
die Hauptscheife (weil sie ohnehin im Wesentlichen immer gleich 
aussieht), bei den IDEs moderner objektorientierter Programmiersprachen 
oft vor dem Programmierer verborgen wird. Sie ist aber immer vorhanden, 
du kriegst sie bloß i.d.R. nicht zu sehen, weil sie irgendwo in den 
Untiefen irgendeiner Komponente liegt. Bei Wixdos z.B. sieht sie 
(vereinfacht) und in C typisch so aus:

while GetMessage(...)
{
   TranslateMessage(...)
   PerformMessage(...)
};

In anderen Spachen ist die Syntax anders, aufgerufen werden aber auch 
immer nur diese drei Funktionen aus der user32.dll.

Dabei verbigt sich hinter den beiden Funktionsaufrufen im Schleifenkern 
nichts anderes als der Aufruf unzähliger Callback-Funktionen, u.a. auch 
die Ereignishandler, die du bei dem geschrieben hast, was du für 
"Programmieren" hältst.

> else if Schleifen finde ich fürn sein Projekt unschön.

"else if Schleifen" gibt es nicht. Du hast absolut keine Ahnung, davon 
aber eine ganze Menge...
Gast #3626109
Lesenswert?

Hab ich mal in VB.net gemacht, samt kopmlexer Arithmetik mit grafischer 
Anzeige im Winkelformat. Aber leider bei einer Virus-Desinfektion 
weggehauen, ohne Backup. War mir dann zu aufwendig, das alles nochmal 
zusammenzufrickeln.

Hatte jeden Tastendruck auf zwei (oder mehr?) Case-Verzweigung geleitet 
und dann per Tag verzweigt. Die eine hat numerische Ausdrücke, die 
andere Rechenbefehle und Symbole (Klammern, etc.) gehandled. Die 
(beliebig vielen) Klammerebenen in Verbindung mit den normalen 
Hierarchien der Rechenoperationen, hatten die meisten Ooops-Erlebnisse 
produziert. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren