Hallo, ich habe mir den Artikel zu Funktionszeigern durchgelesen. http://www.mikrocontroller.net/articles/Funktionszeiger_in_C Kann es sein dass bei dem Beispiel ganz unten bei Menüs mit Funktionszeigern ein while fehtl? Oder soll das dort keine do-while Schleife sein? Tut mir Leid wenn die Frage evtl. zu blöde ist, aber ich bin noch Anfänger und versuche mich gerade in das Thema einzuarbeiten. Danke
Du hast recht. In der Funktion DoMenu fehlt das while, das do mit den Klammern steht ja da.
Welche Bedingung müsste dann in die while Schleife? Eine Endlosschleife ist es ja wie ich denke nicht, oder? Danke
Doch, das dürfte eine Endlosschleife sein sollen. Die while -Schleife (und also die Funktion DoMenu) wird durch das return -Statement (nach Eingabe von 9) verlassen. Also sollte sie so aussehen:
1 | void DoMenu (int NrEntries, struct MenuEntry Menu[]) |
2 | {
|
3 | int i; |
4 | int Auswahl; |
5 | |
6 | do
|
7 | {
|
8 | // ...
|
9 | // weggelassen
|
10 | // ...
|
11 | }
|
12 | while (1); |
13 | }
|
:
Bearbeitet durch User
Vielen Dank für den Hinweis, das Return als Abbruchbedingung habe ich wohl übersehen. Ist dieser Ansatz für ein Menü welches auf einem Display angezeigt werden soll empfehlenswert? Danke
Peter S schrieb: > Vielen Dank für den Hinweis, das Return als Abbruchbedingung habe ich > wohl übersehen. > > Ist dieser Ansatz für ein Menü welches auf einem Display angezeigt > werden soll empfehlenswert? Kommt drauf an. In den meisten Fällen ist dieser Ansatz nicht so toll. Warum? Weil es sich dabei dem Prinzip nach um eine Warteschleife handelt ("warte solange, bis der Benutzer eine Eingabe gemacht hat"), und wir alle wissen, dass so etwas der Tod für ein Programm ist, welches mehrere Dinge gleichzeitig machen soll. Die Temperaturregelung eines Terrariums muss weiter laufen! Und zwar selbst dann, wenn der Benutzer noch überlegt, ob er per Menü die LCD-Hintergrundbeleichtung nun heller oder doch dunkler stellen will und zwischendurch noch aufs Klo muss. Aber: in diesem Artikel geht es primär um Funktionszeiger und wie man mit ihnen arbeitet. Die Kombination aus Funktionszeiger und Text ist auch noch ok, aber die eigentliche Menüfunktion wird man ein wenig anders machen. Eben so, dass sie erstens 2-geteilt ist (Anzeige und Auswertung) und zweitens so, dass das 'Menü' nicht aktiv auf den Benutzer wartet, sondern mal kurz nachsieht ob es eine Benutzerbetätigung gegeben hat und wenn ja, diese dann auswertet (zb Cursor verschieben, Menü bei Bedarf scrollen, Funktion bei Bedarf aufrufen, etc.). Da dieses aber hochgradig von der tatsächlich vorhandenen Hardware abhängt (gibt es ein LCD? Wird die Benutzerinteraktion über UART und Terminal abgewickelt), kann man da keine allgemein verwendbare Standardfunktionen angeben. Das alles muss an die vorhandene Hardware angepasst werden (welche Tasten gibt es? Wo erfolgt die Ausgabe? Hat der Benutzer einen Cursor den er zur Markierung des Menüpunktes benutzt? Wie sieht der Cursor aus? etc. etc). Das alles kann man aber nicht voraussehen und in aller Allgemeinheit behandeln. Daher hab ich mich beim Schreiben des Artikels auf die einfachst mögliche Form der Benutzerinteraktion konzentriert, damit man die Benutzung des Funktionszeigers sieht. Denn genau darum geht es ja im Artikel: Funktionszeiger. Wer in seinem Sprachstudien bei Funktionszeiger angelangt ist, ist sowieso kein Anfänger mehr und hat seine ersten zehntausend Lines of Code schon programmiert. Der weiß auch, wie er dann seine Menüs aufbaut bzw. wie eine State-Machine funktioniert, mit der er dann das drumherum baut.
:
Bearbeitet durch User
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.