Очистить экран в C и C++ в UNIX-системах?
Я хочу знать: как очистить экран в системе на основе UNIX? Я искал в Интернете, но я только что нашел, как это сделать в Windows: система ("CLS"). Я не хочу точно чистить полностью экран, но я хочу открыть "новую страницу", такую как в редакторах NANO и VI. Спасибо
9 ответов
Может быть, вы можете использовать escape-коды
#include <stdio.h>
#define clear() printf("\033[H\033[J")
int main(void)
{
clear();
return 0;
}
Но имейте в виду, что этот метод не совместим со всеми терминалами
Вы можете использовать следующий код, который использует 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);
}
Портативный код 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
и использовать его API, чтобы получить любые возможности, которые вы хотите, хотя это может затянуть довольно много вещей для чего-то столь же простого, как очистка экрана. Тем не менее, это вариант, который нужно рассматривать всерьез, поскольку он дает вам гораздо больше гибкости.
Вы можете достичь этого с помощью последовательностей CSI:
#include <stdio.h>
int main()
{
printf("\x1b[H\x1b[J");
}
Что значит \x1b[H
?
На самом деле это так же, как \x1b[1;1;H
, это означает, что он переместит курсор в строку 1 и столбец 1.
Что значит \x1b[J
ака \x1b[0;J
?
Если n равно 0 или отсутствует, оно будет очищаться от курсора до конца экрана.
Обычно это не просто очистка экрана, а создание приложения с поддержкой терминала.
Вы должны использовать библиотеку ncurses и прочитать HowTo программирования NCURSES
(Возможно, вы могли бы использовать некоторые escape-коды ANSI, когда Дэвид RF ответил, но я не думаю, что это хорошая идея)
Просто используйте #include<stdlib.h>
после #include<stdio.h>
,
Тогда вы можете использовать команду system("clear");
после main() {
то есть:
#include<stdio.h>
#include<stdlib.h>
int main()
{
system("clear");
После этих команд вы можете продолжить работу с вашей программой.
Надеюсь это поможет:)
Чтобы очистить экран с помощью termcaps, используйте это:
write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
Использование system("clear");
с заголовком #include <stdlib.h>
(для языка C) или #include <cstdlib>
(для C++).
Этот код предназначен для очистки экрана со сбросом положения полосы прокрутки в окнах стиля терминала#include <iostream> int main(){ std::cout << "\033c"; return 0;}