[ansi c] implementierung eines "menüs"
-
hallo,
ich bin zwar auf bestem wege mit viel "printf" und "scanf" eine art menü in ner konsolenanwendung entstehen zu lassen, würde aber mal die meinung von erfahreneren programmierern hören. ich verwende z.b. auch "system()" um den bildschirm zu "clearen", natürlich mit präprozessor-makros um unix/linux von windows zu unterscheiden, aber ganz wohl ist mir nicht dabei.
wie würde als rein vom groben ansatz her der "profi" (wenn man bei konsolenprogrammen davon sprechen kann) ein menü realisieren?
-
Naja, wenn du nur mit Ansi-C arbeiten willst bleibt dir wohl nicht so viel Auswahl... Btw: falsches Forum, system ist nicht Ansi & sehr böse...
Für z.B. 1 bis n Auswahlmöglichkeiten kannst du dir doch ganz einfach einn Menü mit do-while-Konstrukt und einer Fallunterscheidung basteln:do { scanf("%i",&var); switch(var) { case 1: ... break; ... }(while var!=abbruchbedingung);
-
gut. soweit sind wir konform
ja ich denke auch dass system böse ist und wäre z.b. dankbar für ne methode den "bildschirm zu löschen", die ich direkt im code umsetzen kann anstatt auf ein exterenes programm zurückgreifen zu müssen. für unix scheint das mit nem speziellen printf() zu gehen aber bei windows weis ich nicht so recht.
-
Naja, wenn du Ansi-konform bleiben willst musst du nicht so beschränkt denken
Was denn z.B., wenn ein MAC-User dein Programm ausführen will?!
Wenn du unabhängig von einer Plattform bleiben willst wirst du wohl mit ner Schleife eine gewisse Zahl an Zeilenumbrüchen generieren müssen...Mfg,
Matze
-
Auf ANSI-Basis gibt es keinen "Bildschirm löschen" Befehl - der Bildschirm wird repräsentiert durch stdout, und dort kannst du nur sequentiell Daten reinschreiben. Wenn du den Bildschirm "direkt" ansprechen willst, kommst du um systemspzifischen Funktionen (conio.h etc) nicht herum.
(eventuell wäre es eine Möglichkeit, die "Improved Console" dafür zu verwenden)
-
danke für euere antworten.
die improved console ist, so wie ich das sehe, c++ und auch noch win32 spezifisch... die kann ich so nicht verwenden weil das projekt ausdrücklich c sein soll und ich mir noch den blöden vorsatz genommen habe weitestgehend systemunabhänig zu programmieren.
im moment blieb mir nix anderes als system("cls") bzw. für linux/unix ein entsprechender printf()... stdout mit \n vollzuhauen "darf" ich auch nicht, das mag unser dozent nicht.
naja gut mein projekt hat auch noch weitaus schwierigere komponenten, deswegen hab ich die guientwicklung einfach auf später verlegt und belasse es bei einem quick&dirty konsolenmenü mangels besserer ideen.
-
Naja, es ist sicher auch möglich, etwas analoges auf C-Ebene zu bauen.
(und mit dem Präprozessor könntest du dann je nach System zwischen conio-Methoden und WinAPI-Konsolenfunktionen wechseln)
PS: Vielleicht reicht es ja, die "Bildschirm löschen" Funktion deines Systems zu verwenden. Oder willst du wirklich ein universell lauffähiges Programm schreiben?
-
nimm doch sowas: http://pdcurses.sourceforge.net/