2013-06-24 6 views
11

Я хочу знать: как очистить экран от UNIX-системы? Я искал в Интернете, но я только что нашел, как это сделать в Windows: system («CLS») Я не хочу, чтобы точно очистить cpmpletely экран, но я хочу открыть «новую страницу», такую как в редакторах NANO и VI. СпасибоОчистить экран в C и C++ в UNIX-системе?

+0

vi и nano используют буферы для хранения текстовых данных. Вам понадобится реализовать такой буфер и механизм прокрутки. –

+3

'printf (" \ e [2J \ e [H ");' –

ответ

3

Как правило, это не просто очистка экрана, но и приложение с поддержкой терминала.

Вы должны использовать ncurses библиотеку и читать NCURSES programming HowTo

(Вы могли бы, возможно, использовать некоторые ANSI escape codes, как David RF ответил, но я не думаю, что это хорошая идея)

16

Может быть, вы можете использовать эвакуационные кодов

#include <stdio.h> 

#define clear() printf("\033[H\033[J") 

int main(void) 
{ 
    clear(); 
    return 0; 
} 

Но имейте в виду, что этот метод не совместим со всеми терминалами

+0

Можете ли вы уточнить "\ 033 [H \ 033 [J" – krupal

+5

[Последовательности выхода из строя ANSI/VT100] (http: //www.termsys. demon.co.uk/vtansi.htm) –

15

Вы можете использовать следующий код, который использует termcap для прозрачного экрана. (не забудьте связать с библиотекой)

#include <stdio.h> 
#include <stdlib.h> 
#include <termcap.h> 

void clear_screen() 
{ 
char buf[1024]; 
char *str; 

tgetent(buf, getenv("TERM")); 
str = tgetstr("cl", NULL); 
fputs(str, stdout); 
} 
+3

+1, на Debian вы должны установить 'libncurses5-dev' и скомпилировать с помощью' -lncurses' –

4

Портативный код UNIX следует использовать базу данных Terminfo для всех курсоров и экран манипуляции. Это то, что использует библиотеки, такие как curses, для достижения таких эффектов, как окна и т. Д.

В базе данных terminfo содержится список возможностей (например, clear, что и используется для очистки экрана и отправки курсора в верхнюю часть). Он поддерживает такие возможности для широкого диапазона устройств , поэтому вам не нужно беспокоиться о том, используете ли вы консоль Linux или очень датированный терминал VT52.

Как, как вы получить характер потоков для определенных операций, вы можете выбрать освященное время, но довольно ужасный метод только с помощью system сделать это:

system ("tput clear"); 

Или вы можете захватить вывод из этой команды в буфер, так позже использовать вовлекают только выводить символы вместо повторного запуска команды:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

static char scrTxtCls[20]; static size_t scrSzCls; 

// Do this once. 

FILE *fp = popen ("tput clear", "r"); 
scrSzCls = fread (scrTxtCls, 1, sizeof(scrTxtCls), fp); 
pclose (fp); 
if (scrSzCls == sizeof(scrTxtCls)) { 
    actIntelligently ("you may want to increase buffer size"); 
} 

// Do this whenever you want to clear the screen. 

write (1, cls, clssz); 

Или, вы можете связать с ncurses и использовать его A PI, чтобы получить любые возможности, которые вы хотите, хотя это может перетащить немало вещей для чего-то столь же простого, как очистка экрана. Тем не менее, это вариант, который следует рассматривать серьезно, поскольку он дает вам большую гибкость.

0

Чтобы очистить экран с помощью termcaps, используйте:

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0))); 
0

Просто используйте #include<stdlib.h> после #include<stdio.h>.

Затем вы можете использовать команду system("clear"); после main() {

я.e:

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    system("clear"); 

После этих команд вы можете продолжить свою программу.

Надеется, что это помогает :)

0

Использование system("clear"); с заголовком #include <stdlib.h> (для языка C) или #include <cstdlib> (для C++).