2017-11-26 16 views
0

Ich verwende XUBUNTU 16.04 und Geany. Ich fange an, die Bibliothek ncurses zu testen. Ich kann keine Charaktere zeigen. Wenn ich das Programm starte, erscheint ein Fenster, aber die Zeichen "a" und "*" erscheinen nicht.Das Drucken von Zeichen mit Ncurses schlägt fehl

Dies ist mein Code:

#include <ncurses.h> 
void line(char ch, int n) 
{ 
int i; 
for(i = 1; i<=n; i++) 
     addch(ch); 
} 

int main() 
{ 
    clear(); 
    line("a", 50); 
    line("*", 8); 
    return 0; 
} 
+2

Wo ist die Refresh? Wo ist das 'initscr()'? Wo ist die Reinigung? Dies ist nicht selbst initialisierend. –

Antwort

3

man curs_refresh:

Die refresh und wrefresh Routinen (oder wnoutrefresh und doupdate) muss lediglich tatsächliche Ausgabe an das Terminal zu bekommen, wie andere Routinen aufgerufen werden manipulieren Datenstrukturen.

So fehlt Ihrem Programm ein refresh();.

Es sieht auch so aus, als ob Sie die Initialisierung/Bereinigung verpassen, d. H. Am Anfang des Programms initscr() am Anfang und endwin() am Ende Ihres Programms aufrufen.

2

Zwei Dinge fehlen:

  • Initialisierung
  • etwas, um den Text auf dem Bildschirm mit initscr

Initialisierung beginnt kurz zu halten (oder newterm, wenn Sie ead the manual page r). Wie geschrieben, würde das Programm etwas auf den Bildschirm drucken und ohne Pause beenden (und wenn Ihr Terminal den alternativen Bildschirm verwendet, würde der Text verschwinden). A getch (read a character from the keyboard) tut dies ebenso wie refresh. By the way, ist die clear unnötig, weil initscr does that:

Der initscr Code den Terminaltyp bestimmt und alle Strukturen Flüche Daten initialisiert. initscr bewirkt auch, dass der erste Anruf aktualisiert wird (3x) , um den Bildschirm zu löschen. Wenn Fehler auftreten, schreibt initscr eine entsprechende Fehlermeldung zum Standardfehler und beendet; Andernfalls wird ein Zeiger an stdscr zurückgegeben.

Try this:

#include <curses.h> 
void line(char ch, int n) 
{ 
int i; 
for(i = 1; i<=n; i++) 
     addch(ch); 
} 

int main() 
{ 
    initscr(); 
    cbreak(); 
    noecho(); 
    line("a", 50); 
    line("*", 8); 
    getch(); 
    endwin(); 
    return 0; 
} 
+0

Danke. Es klappt – Juan

Verwandte Themen