reconoce programas programa para interno externo ejecutar compilar como comando c++ windows linux console cross-platform

programas - ¿Cómo borro la consola en AMBOS Windows y Linux usando C++?



programa para compilar c++ (12)

¡Sé que esto no responde mi propia pregunta, pero! Esto funciona para Windows ( #include <windows.h> ):

void clrscr() { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, '' '', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); }

Necesito una solución multiplataforma para borrar la consola tanto en Linux como en Windows escrita en C ++. ¿Hay alguna función para hacer esto? También tenga en cuenta que no quiero que el programador del usuario final tenga que cambiar ningún código en mi programa para que sea claro para Windows vs Linux (por ejemplo, si tiene que elegir entre dos funciones, entonces la decisión debe tomarse en tiempo de ejecución o en tiempo de compilación de forma autónoma).


Así es como lo haces en cualquier otra plataforma, pero no funciona en Windows:

cout << "/f";

Tal vez necesites hacer una compilación condicional:

void clrscr() { #ifdef _WIN32 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, '' '', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); #else cout << "/f"; #endif }


En Linux, es posible borrar la consola. La mejor manera es escribir la siguiente secuencia de escape en stdout:

write(1,"/E[H/E[2J",7);

que es lo que hace / usr / bin / clear , sin la sobrecarga de crear otro proceso.


La pregunta tal como se publicó no tiene respuesta, porque impone restricciones imposibles. "Borrar la pantalla" es una acción muy diferente en diferentes sistemas operativos, y cómo uno lo hace es específico del sistema operativo. Consulte esta respuesta frecuente para obtener una explicación completa de cómo hacerlo en varias plataformas populares con "consolas" y plataformas con "terminales". También encontrará en el mismo lugar alguna explicación de los errores comunes que debe evitar, varios de los cuales son, ¡ay! - dado arriba como respuestas.


No lo haría

for (int i=0;i<1000;i++){cout<<endl;}

limpiar la pantalla en todos los sistemas operativos?


Respuesta corta: no puedes.

Respuesta más larga: utilice una biblioteca de curses (ncurses en Unix, pdcurses en Windows). Los NCurs deben estar disponibles a través de su gestor de paquetes, y ambos ncurses y pdcurses tienen exactamente la misma interfaz (pdcurses también puede crear ventanas independientemente de la consola que se comporten como las ventanas de la consola).

La respuesta más difícil: use #ifdef _WIN32 y cosas así para hacer que su código actúe de manera diferente en diferentes sistemas operativos.


Un truco simple: ¿por qué no verificar el tipo de sistema operativo mediante el uso de macros en combinación con el uso del comando system () para borrar la consola? De esta forma, va a ejecutar un comando del sistema con el comando de consola apropiado como parámetro.

#ifdef _WIN32 #define CLEAR "cls" #else //In any other OS #define CLEAR "clear" #endif //And in the point you want to clear the screen: //.... system(CLEAR); //....


No hay un comando genérico para borrar la consola en ambas plataformas .

#include <cstdlib> void clear_screen() { #ifdef WINDOWS std::system("cls"); #else // Assume POSIX std::system ("clear"); #endif }


Bueno, hay una alternativa muy cercana a limpiar la pantalla. Podría intentar usar un bucle for que repita muchas líneas nuevas. Por ejemplo:

for (i = 0; i < 100000; i++) { printf ("/n/n/n/n/n"); }

Después de hacer este ciclo, la terminal no te permite desplazarte hacia el lugar donde estabas en la parte superior, un enfoque poco profesional con sentido común. No responde directamente lo que estás preguntando, pero puede funcionar.


Esto debería funcionar si estás trabajando en la consola

#include <conio.h> int main() { clrscr(); }



Este código borra la consola tanto en Windows como en Unix (aunque en realidad se compila de manera diferente):

// File: clear_screen.h #ifndef _CLEAR_SCREEN_H #define _CLEAR_SCREEN_H void clearScreen(void); /* Clears the screen */ #endif /* _CLEAR_SCREEN_H */

// File: clear_screen.c #ifdef _WIN32 #include <windows.h> void clearScreen(void) { HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); COORD topLeft = {0, 0}; DWORD dwCount, dwSize; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hOutput, &csbi); dwSize = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter(hOutput, 0x20, dwSize, topLeft, &dwCount); FillConsoleOutputAttribute(hOutput, 0x07, dwSize, topLeft, &dwCount); SetConsoleCursorPosition(hStdOut, topLeft); } #endif /* _WIN32 */ #ifdef __unix__ #include <stdio.h> void clearScreen(void) { printf("/x1B[2J"); } #endif /* __unix__ */