UNIX-негізделген жүйедегі C және C ++-дағы бейнебетті тазалау керек пе?

Мен UNIX-ға негізделген жүйені қалай тазарту керектігін білгім келеді. Мен Интернетте іздестім, бірақ Windows-де қалай істейтінімді таптым: жүйе («CLS») Экранды толығымен тазалауды қаламаймын, бірақ NANO және VI редакторларында «жаңа бет» ашқым келеді. Рахмет

10
vi және nano-буферлер мәтіндік деректерді сақтау үшін қолданыңыз. Мұндай буфер мен жылжыту механизмін енгізу қажет.
қосылды автор bash.d, көзі
printf («\ e [2J \ e [H»]);
қосылды автор Hello World, көзі

14 жауаптар

Мүмкін сіз құтқару кодтарын пайдалана аласыз

#include 

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

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

Бірақ бұл әдіс барлық терминалдармен үйлеспейтінін есте сақтаңыз

16
қосылды
қосылды автор Keine Lust, көзі
Сіз «033 [H \ 033 [J]
қосылды автор krupal, көзі

Территорлы экран үшін келесі кодты қолдануға болады. (кітапханамен байланыстыруды ұмытпаңыз)

#include 
#include 
#include 

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

tgetent(buf, getenv("TERM"));
str = tgetstr("cl", NULL);
fputs(str, stdout);
} 
15
қосылды
+1, Debian-де libncurses5-dev -ті орнату керек және -lncurses
қосылды автор Keine Lust, көзі

Портативті UNIX коды барлық терминдер мен терминалдардың манипуляциясы үшін терминалды пайдалану керек. Бұл curses сияқты кітапханалар терезе және т.б. сияқты әсерге жету үшін қолданылады.

Терминалдың дерекқоры экранның тазалануына және курсорды жоғарғы жағына жіберуге қолданылатын clear сияқты кеңістіктер тізімін қолдайды. Ол Linux консолін немесе (өте жылжымалы) VT52 терминалын пайдаланып жатқаныңызға алаңдамау үшін, құрылғылардың кең ауқымына арналған осындай мүмкіндікті сақтайды.

Сіз get ретінде белгілі әрекеттер үшін таңбалар ағындарын қалай болсаңыз, мұны істеу үшін system пайдалану арқылы уақытты құрметтейтін, бірақ түршігерлік әдісті таңдауға болады:

system ("tput clear");

Немесе сіз сол пәрменнің шығысын буферге түсіре аласыз, сонда кейінірек пайдалану пәрменді қайта іске қосудың орнына таңбаларды шығаруды ғана қамтиды:

#include 
#include 
#include 

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-ін қолдансаңыз да, бұл экранның тазалануы сияқты қарапайым нәрсе үшін өте көп нәрселерді апаруы мүмкін. Дегенмен, бұл сізге байыпты қарастырудың мүмкіндігі, себебі ол сізге әлдеқайда икемділік береді.

4
қосылды

Әдетте, экранды тазалау ғана емес, сонымен қатар терминалға түсінікті қосымшаны жасау мәселесі де жоқ.

You should use the ncurses library and read the NCURSES programming HowTo

(Сіз кейбір ANSI құтылу кодтарын David RF жауап берді, бірақ бұл жақсы идея емес)

3
қосылды
#include 
int main(void)
{
    system("clear");
}
2
қосылды
#include 
int main(void)
{
    system("clear");
}
2
қосылды

Терминдерді қолдану арқылы экранды тазарту үшін мына әрекеттерді пайдаланыңыз:

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
0
қосылды

Терминдерді қолдану арқылы экранды тазарту үшін мына әрекеттерді пайдаланыңыз:

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
0
қосылды

Use system("clear"); with header #include (for C Language) or #include (for C++).

0
қосылды

Use system("clear"); with header #include (for C Language) or #include (for C++).

0
қосылды

Just use #include after #include.

Then you can use the command system("clear");after main() {

i.e:

#include
#include

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

Осы командалардан кейін бағдарламаңызды жалғастыра аласыз.

Бұл көмектеседі деп үміттенемін :)

0
қосылды

Just use #include after #include.

Then you can use the command system("clear");after main() {

i.e:

#include
#include

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

Осы командалардан кейін бағдарламаңызды жалғастыра аласыз.

Бұл көмектеседі деп үміттенемін :)

0
қосылды

Бұл CSI тізбегі арқылы қол жеткізуге болады:

#include 
int main()
{
    printf("\x1b[H\x1b[J");
}

\ x1b [H деген не?

Шын мәнінде ол \ x1b [1; 1; H ) сияқты бірдей, бұл курсорды 1-жолға және 1-бағанға жылжытады дегенді білдіреді.

\ x1b [J a.k.a \ x1b [0; J ) дегеніміз не?

Егер n - 0 немесе жоқ болса, ол курсордан экранның соңына дейін өшіріледі.

Source: https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

0
қосылды

Бұл CSI тізбегі арқылы қол жеткізуге болады:

#include 
int main()
{
    printf("\x1b[H\x1b[J");
}

\ x1b [H деген не?

Шын мәнінде ол \ x1b [1; 1; H ) сияқты бірдей, бұл курсорды 1-жолға және 1-бағанға жылжытады дегенді білдіреді.

\ x1b [J a.k.a \ x1b [0; J ) дегеніміз не?

Егер n - 0 немесе жоқ болса, ол курсордан экранның соңына дейін өшіріледі.

Source: https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

0
қосылды