Gibt es eine "richtige" Möglichkeit, das Konsolenfenster in C zu löschen, außer system("cls")
?
printf("\e[1;1H\e[2J");
Diese Funktion funktioniert auf ANSI-Terminals, fordert POSIX. Ich gehe davon aus, dass es eine Version gibt, die möglicherweise auch auf der Windows-Konsole funktioniert, da sie auch ANSI-Escape-Sequenzen unterstützt.
#include <unistd.h>
void clearScreen()
{
const char *CLEAR_SCREEN_ANSI = "\e[1;1H\e[2J";
write(STDOUT_FILENO, CLEAR_SCREEN_ANSI, 12);
}
Es gibt noch einige andere Alternativen , von denen einige den Cursor nicht auf {1,1} bewegen.
Da Sie cls
erwähnen, klingt das so, als würden Sie sich auf Fenster beziehen. Wenn ja, dann hat dieses KB-Element den Code, der dies tun wird. Ich habe es gerade ausprobiert und es funktionierte, als ich es mit dem folgenden Code anrief:
cls( GetStdHandle( STD_OUTPUT_HANDLE ));
#include <conio.h>
und verwenden
clrscr()
Eine Problemlösung, die unter Windows (cmd.exe), Linux (Bash und zsh) und OS X (zsh) getestet wurde:
#include <stdlib.h>
void clrscr()
{
system("@cls||clear");
}
Versuchen Sie dies aus Gründen der Portabilität:
#ifdef _WIN32
#include <conio.h>
#else
#include <stdio.h>
#define clrscr() printf("\e[1;1H\e[2J")
#endif
Dann rufen Sie einfach clrscr()
auf. Unter Windows wird clrscr()
von conio.h
Verwendet, und unter Linux werden ANSI-Escape-Codes verwendet.
Wenn Sie wirklich es "richtig" machen wollen, können Sie die Mittelsmänner (conio
, printf
usw.) eliminieren und es nur mit dem niedrigen Level machen System-Tools (bereiten Sie sich auf einen massiven Code-Dump vor):
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
#else // !_WIN32
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
#endif
Es gibt keinen tragbaren C-Weg, dies zu tun. Obwohl verschiedene Cursorbearbeitungsbibliotheken wie Flüche relativ portabel sind. conio.h ist zwischen OS/2-DOS und Windows portierbar, jedoch nicht für * nix-Varianten.
Die gesamte Vorstellung einer "Konsole" ist ein Konzept, das außerhalb des Geltungsbereichs von Standard C liegt.
Wenn Sie nach einer reinen Win32-API-Lösung suchen, gibt es keinen einzigen Aufruf in der Windows-Konsolen-API, um dies auszuführen. Eine Möglichkeit ist, FillConsoleOutputCharacter mit einer ausreichend großen Anzahl von Zeichen. Oder WriteConsoleOutput Sie können GetConsoleScreenBufferInfo verwenden, um herauszufinden, wie viele Zeichen ausreichen.
Sie können auch einen völlig neuen Konsolenbildpuffer erstellen und den aktuellen erstellen.
Mit Makros können Sie überprüfen, ob Sie Windows, Linux, Mac oder Unix verwenden, und die jeweilige Funktion abhängig von der aktuellen Plattform aufrufen. Etwas wie folgt:
void clear(){
#if defined(__linux__) || defined(__unix__) || defined(__Apple__)
system("clear");
#endif
#if defined(_WIN32) || defined(_WIN64)
system("cls");
#endif
}
Windows:
system("cls");
Unix:
system("clear");
Sie können stattdessen Zeilenumbrüche einfügen, bis alles gescrollt ist. Schauen Sie sich das an hier .
Damit erreichen Sie leicht Portabilität.
geben Sie einfach clrscr () ein. Funktion in void main ().
zum Beispiel:
void main()
{
clrscr();
printf("Hello m fresher in programming c.");
getch();
}
clrscr();
funktion leicht zu löschen Bildschirm.
Der richtige Weg, dies zu tun, ist die Verwendung von tput
- oder terminfo
-Funktionen zum Abrufen von Terminal-Eigenschaften und Einfügen neuer Zeilen nach Maß.