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!
while(!getkey()); ? Braucht natürlich eine Funktion getkey, welche 0 zurückgibt wenn nichts gedrückt ist...
Unter Linux/Unix könnte man select() versuchen. Oder Interrupts auf GPIOs. Bei nem AVR o.ä. auch mit Interrupts. Leider sagst du nicht, was er nutzt, weshalb man Dir einfach nicht helfen kann.
Mr Dee schrieb: > 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? Callbacks sind normalerweise keine Eigenschaft der Sprache, sondern der Umgebung. Und zu der hast Du noch nichts geschrieben.
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.
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...
LOL, if/else findest du "unschön". Junge, das wird noch schlimmer, ein Parser geht kaum ohne goto.
Dr. Ecksack schrieb: > LOL, if/else findest du "unschön". Junge, das wird noch schlimmer, > ein Parser geht kaum ohne goto. Ich habe schon zig Parser geschrieben und keiner brauchte ein goto. Nicht mal aus kosmetischen Gruenden.
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. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.