Sinnvoller Umgang mit eigenen Befehlen (strings von stdin)

alexm123

Grünschnabel
Hi!

Ich arbeite gerade an einem kleinen C-Programm, bei dem über stdin Befehle eingegeben werden (z.B. open, close, help, ...). Und je nach Befehl wird halt eine Funktion aufgerufen; gibt es den Befehl nicht, soll eine Fehlermeldung kommen.
Im Moment habe ich das mit etlichen if- Abfragen gelöst, also ca. so:
Code:
command = [String, der von stdin eingelesen wurde];

if (strcmp(command, "open") == 0)
{
  runOpen();
}
...

Funktioniert zwar wunderbar, allerdings wird die Liste an if-Abfragen mit der steigenden Anzahl an möglichen Befehlen immer länger und unübersichtlicher. Und jetzt wollte ich fragen, ob es für dieses Problem eine elegantere Lösung gibt?
Ich hab schon an ein enum gedacht, dass alle Befehle enthält, damit ich dann den eingegebenen Befehl im enum suchen kann und mit einer switch-Anweisung die jeweilige Funktion aufrufe. Allerdings habe ich es bis jetzt noch nicht geschafft, bzw. ich weiß auch nicht, ob es überhaupt so geht und/oder ob es evtl. eine noch bessere Lösung gibt.

mfg
 
Hallo alexm123

Und jetzt wollte ich fragen, ob es für dieses Problem eine elegantere Lösung gibt?
Theoretisch geht das, siehe z.B. http://www.cplusplus.com/forum/general/21518/. (Das ist C++, in C wäre das noch um einiges komplexer).
Und jetzt wollte ich fragen, ob es für dieses Problem eine elegantere Lösung gibt?
Solange es nicht einige hundert Funktionen sind, macht man sich mehr Mühe, als es tatsächlich nützt.
Ich hab schon an ein enum gedacht, dass alle Befehle enthält, damit ich dann den eingegebenen Befehl im enum suchen kann und mit einer switch-Anweisung die jeweilige Funktion aufrufe. Allerdings habe ich es bis jetzt noch nicht geschafft, bzw. ich weiß auch nicht, ob es überhaupt so geht und/oder ob es evtl. eine noch bessere Lösung gibt.
enum ist ausschliesslich für Ganzzahlen, nicht für strings.

Gruss
cwriter
 
Hi cwriter!

Danke für die schnelle Antwort.
Naja, wenn ich mir damit nur mehr Probleme mache, als es nützen würde, dann lass ich es lieber so :)
Vielen Dank nochmal!

mfg
 
Zurück