[C++] Clearscreen

V1tzl1

Lt. Junior Grade
Registriert
Sep. 2004
Beiträge
384
HI hab mal wieder ne Frage, ich will in meinem Konsolenprogramm eine Art cleascreen
einbauen, meinetwegen auch nur ein paar Leerzeilen einfügen, aber als ich
ein paar endl ausgegeben habe, erschien der neue Code ganz unten in der cmd.

Gibt es nicht einen einfachen Befehl um die Konsole zu leeren?

MfG V1tzl1
 
@Quidoff
Leider nicht portabel :(.

@V1tzl1
Code:
#include <stdio.h>

#if WIN32
	#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
	void cls(HANDLE hConsole)
	{
		COORD coordScreen = { 0, 0 };
		BOOL bSuccess;
		DWORD cCharsWritten;
		CONSOLE_SCREEN_BUFFER_INFO csbi;
		DWORD dwConSize;
	
		bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
		PERR( bSuccess, "GetConsoleScreenBufferInfo" );
		dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
		bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',	dwConSize, coordScreen, &cCharsWritten );
		PERR( bSuccess, "FillConsoleOutputCharacter" );
		bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
		PERR( bSuccess, "ConsoleScreenBufferInfo" );
		bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten );
		PERR( bSuccess, "FillConsoleOutputAttribute" );
		bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
		PERR( bSuccess, "SetConsoleCursorPosition" );
		return;
}
#else
	void cls(void)
	{
		printf("\033[2J");
	}
#endif
Beim kompilieren wird die entsprechende Version der Funktion für cls() für Windows oder für andere Systeme definiert.
 
Zuletzt bearbeitet:
Naja, wenn wir ganz kleinlich sind, gibt's sowas wie Konsole leeren überhauptgarnicht in C / C++. Weil einem niemand sagt / garantiert / garantieren kann, dass es sowas wie eine Konsole gibt. Es gibt eine Standardausgabe, mehr nicht. Was ist, wenn diese einfach sequenziell auf ein Tape schreibt... =)

Da eine Anwendung damit sowieso nicht portabel ist, finde ich sollte man auch keinen Hehl daraus machen, direkt die entsprechenden Api-Funktionen zu benutzen. Borons Beispiel zeigt das sehr schön anhand der Win-API. Das printf-Beispiel... ich glaube, es hängt sehr stark vom verwendeten Terminal ab, ob das überhaupt funktioniert. Unter Linux kann man zum Leeren der Konsole (glaub ich) die ncurses-Bibliothek dafür benutzen.
 
Hallo,

sehe ich genauso. Bei ConsoleIO hört die Portabilität leider auf, bzw. fängt die Arbeit an :-).

Theoretisch oder eben auch praktisch kann ich mich mit einem beliebigen Terminalprogramm an einem Rechner anmelden.
Wenn dieses Terminalprogramm keine Ansi Steuercodes versteht bzw umsetzen kann, wars das mit dem Clearscreen.

Wobei die Verwendung von z.B. VT100 Steuercodes trotzdem kein schlechter Ansatz ist, da das doch ziemlich verbreitet ist. Die meisten oder zumindest ziemlich viele Terminalprogramme können das mehr oder weniger schlecht emulieren.

Oder eben ncurses das ist bei jedem Unix/Linux dabei.

Ich würde mich aber ehrlich gesagt nicht allzu lange mit der Console aufhalten.
Graphisch macht das ganze mehr Spass und sieht auch schöner aus.

MfG

Arnd
 
Zurück
Oben