2010-09-05 11 views
6

Wie implementieren wir clrscr()? Googeln ich fand, dass \x1b[2j kann verwendet werden, um den Bildschirm zu löschen, aber wie verwenden wir es?So löschen Sie den Bildschirm mit x1b [2j?

+5

es hängt von Ihrem Betriebssystem und Umgebung im Allgemeinen ab. –

+0

Ich frage mich, ob diese Frage überhaupt Sinn macht. Entweder Sie erstellen eine "Vollbild" -App, dann wissen Sie bereits (Plattform- usw. abhängig), wie Sie den Cursor positionieren und vieles mehr, einschließlich des Löschens des Bildschirms. Oder Sie erstellen ein Cmd-Line-Dienstprogramm, die in Ordnung aussieht, wenn Sie nur Zeilenumbrüche und möglicherweise Backspaces oder CRs verwenden (z. B. Zeilenumbrüche an der gleichen Stelle) ... – TheBlastOne

Antwort

5

Die Standard-C-Bibliothek bietet keine Möglichkeit, den Bildschirm zu löschen. Sie benötigen dazu eine betriebssystemabhängige Bibliothek.

Unter DOS und Windows, für ein Programm in einem DOS oder Windows-Konsole ausgeführt wird, können Sie die DOS/Windows-Erweiterungen in der Kern-C-Bibliothek mit dem Betriebssystem ausgeliefert bereitgestellt verwenden:

#include <conio.h> 
clrscr(); 

Unter Unix-Systemen, Sie können die Curses-Bibliothek verwenden, die mit dem Betriebssystem bereitgestellt wird. Ports der Curses-Bibliothek existieren für die meisten Betriebssysteme, einschließlich Windows, also ist dies der Weg in einem tragbaren Programm. Verknüpfen Sie Ihr Programm mit -lcurses und verwenden

#include <curses.h> 
erase(); 

Einige Terminals und Terminal-Emulatoren führen spezielle Funktionen wie das Löschen des Bildschirms, wenn sie eine Escape-Sequenz erhalten. Die meisten Terminals folgen dem ANSI-Standard, der eine Anzahl von Escape-Sequenzen definiert; "\x1b[2J" ist eine solche Sequenz und ihre Wirkung ist es, den Bildschirm zu löschen. Beachten Sie die Hauptstadt J. Auf einem solchen Terminal löscht fputs("\x1b[2J", stdout) den Bildschirm. Dies ist genau das, was die Curses-Bibliothek tut, wenn Sie erase() auf solch einem Terminal anrufen; Die Curses-Bibliothek enthält eine Datenbank mit Terminaltypen und welche Escape-Sequenzen für die verschiedenen Typen zu verwenden sind.

2

Wenn Sie sicher sind, dass die Kontrollsequenz die Sie verwenden müssen, dann gilt:

#include <stdio.h> 

int main(void) 
{ 
    fputs("\x1b[2j", stdout); 
    return(0); 
} 

Dies verzichtet bewusst auf das Newline - aber Sie könnten mit besser dran, einen nach dem ‚j‘ hinzufügen. Wie jedoch Gilles in seinem answer hervorhebt, gibt es andere Möglichkeiten, dies zu tun, die Vorteile im Vergleich zu dieser Lösung haben.

+0

funktioniert nicht :(:( –

+0

@fahad: welche Plattform Wenn Sie auf normalem DOS sind, müssen Sie ANSI.SYS laden, damit Terminal-Escapes funktionieren.Unsicher über Windows.Unter UNIX sollte es immer funktionieren, es sei denn, Sie haben ein * wirklich * ungerades Terminal mit Nichtstandard-Escape –

+0

Windows ist meine Plattform –

0

Unter Windows können Sie

#include <tchar.h> 
#include <stdio.h> 
#include <windows.h> 

void clrscr(void) 
{ 
HANDLE std_out = GetStdHandle(STD_OUTPUT_HANDLE); 
CONSOLE_SCREEN_BUFFER_INFO cbi; 
COORD origin = {0,0}; 
int buf_length; 

GetConsoleScreenBufferInfo(std_out,&cbi); 
buf_length = cbi.dwSize.X*cbi.dwSize.Y; 
FillConsoleOutputCharacter(std_out,0x20,buf_length,origin,0); 
FillConsoleOutputAttribute(std_out,0x07,buf_length,origin,0); 
} 

int _tmain(int argc, wchar_t *argv[], wchar_t *envp[]) 
{ 
DWORD i; 
_tprintf(TEXT("Clear screen probe...\n")); 
clrscr(); 

return 0; 
} 

"\ x1b [H \ x1b [2J" versuchen, funktioniert auf OSX.

Verwandte Themen