2010-09-05 23 views
6

¿Cómo implementamos clrscr()? Búsqueda en Google descubrí que \x1b[2j se puede utilizar para borrar la pantalla, pero ¿cómo la usamos?¿Cómo borrar la pantalla con x1b [2j?

+5

depende de su sistema operativo y el entorno en general. –

+0

Me pregunto si esta pregunta tiene sentido. Ya sea que cree una aplicación de "pantalla completa", entonces ya sabrá (dependiente de la plataforma, etc.) cómo colocar el cursor, y mucho más, incluso cómo borrar la pantalla. O bien, crea una utilidad de línea cmd, que se ve bien si solo usa saltos de línea y quizás espacios inversos o CR (para recuentos de línea que vuelven a dibujarse en el mismo lugar, por ejemplo) ... – TheBlastOne

Respuesta

5

La biblioteca C estándar no proporciona una forma de borrar la pantalla. Necesita una biblioteca dependiente del sistema operativo para eso.

Bajo DOS y Windows, para un programa que se ejecuta en una consola de DOS o Windows, puede utilizar las extensiones de DOS/Windows proporcionadas en la biblioteca central C se suministra con el sistema operativo:

#include <conio.h> 
clrscr(); 

bajo sistemas Unix, puede usar la biblioteca de curses, que se proporciona con el sistema operativo. Los puertos de la biblioteca de curses existen para la mayoría de los sistemas operativos, incluido Windows, por lo que este es el camino a seguir en un programa portátil. Enlazar su programa con -lcurses y utilizar

#include <curses.h> 
erase(); 

Algunos terminales y emuladores de terminal realizan funciones especiales, tales como la limpieza de la pantalla cuando reciben una secuencia de escape. La mayoría de los terminales siguen el estándar ANSI que define un número de secuencias de escape; "\x1b[2J" es una secuencia de este tipo, y su efecto es borrar la pantalla. Tenga en cuenta el capital J. En tal terminal, fputs("\x1b[2J", stdout) borra la pantalla. Esto es de hecho lo que hace la biblioteca de curses cuando llama al erase() en tal terminal; la biblioteca de curses incluye una base de datos de tipos de terminales y qué secuencias de escape usar en los diversos tipos.

2

Si está seguro de que es la secuencia de control que desee utilizar y, a continuación:

#include <stdio.h> 

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

Esto omite deliberadamente el salto de línea - pero podría ser mejor con la adición de una después de la 'j'. Sin embargo, como señala Gilles en su answer, hay otras maneras de hacerlo que tienen ventajas en comparación con esta solución.

+0

doesnt work :(:( –

+0

@fahad: what platform Si tiene un DOS antiguo heredado, necesita tener ANSI.SYS cargado para que funcione el escape del terminal. No estoy seguro acerca de Windows. En Unix siempre debería funcionar a menos que tenga un terminal * realmente * impar con escape no estándar códigos –

+0

windows es mi plataforma –

0

En Windows puede intentar

#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" funciona en OSX.

Cuestiones relacionadas