Ich lerne in C zu programmieren und möchte in der Lage sein, Zeichen in das Terminal einzugeben, während mein Code läuft, ohne return zu drücken. Mein Programm funktioniert, aber wenn ich initscr()
aufruft, wird der Bildschirm gelöscht - auch nach dem Aufruf von filter()
. Die Dokumentation für filter
schlägt vor, das Clearing zu deaktivieren - dies ist jedoch bei mir nicht der Fall.
Warum löscht der obige Code den Bildschirm immer noch und was könnte getan werden, um ihn zu beheben?
Ich benutze Debian Lenny (stabil) und Gnome-Terminal, wenn das hilft.
Erweitern Sie die Antwort von mike.dld, das funktioniert für mich auf MacOS X 10.6.6 (GCC 4.5.2) mit der System Curses-Bibliothek - ohne den Bildschirm zu löschen. Ich fügte die Fähigkeit hinzu, die getippten Zeichen aufzuzeichnen (geloggt in einer Akte "x") und die Fähigkeit, CONTROL-D einzugeben und das Programm zu stoppen, anstatt den Benutzer zu zwingen, zu unterbrechen.
%Vor%Sie würden Ihren Bildschirm in einer Fluchanwendung aus einem der folgenden Gründe gelöscht sehen:
initscr
auf (wodurch der Bildschirm gelöscht wird) oder newterm
ohne zuerst filter
oder Im letzteren Fall können Sie die alternative Bildschirmfunktion in ncurses unterdrücken, indem Sie die Zeiger enter_ca_mode
und exit_ca_mode
auf NULL ist in dialog
erledigt. Besser noch, wählen Sie eine Terminalbeschreibung, die das tut, was Sie wollen.
Weiterführende Literatur:
Grundsätzlich ist es so, dass curses den Bildschirm (oder das Fenster, im Falle eines gefensterten Terminals) übernimmt. Du kannst Flüche nicht wirklich mit stdio mischen, und du kannst Flüche nicht wirklich benutzen, um einfach etwas einzugeben oder auszugeben, ohne den Rest des Bildschirms zu stören. Es gibt teilweise Workarounds, aber Sie werden nie wirklich in der Lage sein, es so zu machen, wie es sich anhört. Entschuldigung.
Ich würde vorschlagen, entweder Ihr Programm neu zu schreiben, um überall Flüche zu verwenden oder Alternativen wie readline zu untersuchen.