Подтвердить что ты не робот

Как очистить консоль в ОС Windows и Linux с помощью С++

Мне нужно кросс-платформенное решение для очистки консоли в Linux и Windows, написанное на С++. Существуют ли какие-либо функции в этом? Также обратите внимание, что я не хочу, чтобы программист-конечный пользователь должен был изменить любой код в моей программе, чтобы он очистился для Windows vs Linux (например, если он должен выбирать между двумя функциями, тогда решение должно быть принято во время выполнения или во время компиляции автономно).

4b9b3361

Ответ 1

Короткий ответ: вы не можете.

Более длинный ответ: используйте библиотеку curses (ncurses on Unix, pdcurses в Windows). NCurses должны быть доступны через ваш менеджер пакетов, и как ncurses, так и pdcurses имеют тот же самый интерфейс (pdcurses также может создавать окна независимо от консоли, которые ведут себя как окна консоли).

Самый сложный ответ: используйте #ifdef _WIN32 и тому подобное, чтобы ваш код действовал по-разному в разных операционных системах.

Ответ 3

В linux можно очистить консоль. Самый лучший способ - записать следующую escape-последовательность в stdout:

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

что и делает /usr/bin/clear, без накладных расходов на создание другого процесса.

Ответ 4

Простой трюк: почему бы не проверить тип ОС с помощью макросов в сочетании с использованием команды system() для очистки консоли? Таким образом, вы должны выполнить системную команду с соответствующей консольной командой в качестве параметра.

#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);
//....

Ответ 5

Вопрос, опубликованный, является неопровержимым, поскольку он налагает невозможные ограничения. "Очистка экрана" - это совсем другое действие в разных операционных системах, и как это делает операционная система. См. Этот часто задаваемый ответ для полного объяснения того, как это сделать это на нескольких популярных платформах с "консолями" и платформами с "терминалами". Вы также найдете В том же месте некоторое объяснение общие ошибки, которых следует избегать, некоторые из которых - Увы! — приведенные выше в качестве ответов.

Ответ 6

Так вы делаете это на любой другой платформе, но она не работает в Windows:

cout << "\f";

Возможно, вам нужно сделать условную компиляцию:

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
}

Ответ 7

Я знаю, что это не отвечает на мой вопрос, но! Это работает для 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);
}

Ответ 8

Хорошо, есть очень близкая альтернатива очистке экрана. Вы можете попробовать использовать цикл for, который многократно повторяет новые строки. Например:

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

После того, как вы сделаете этот цикл, терминал не позволит вам вернуться назад туда, где вы были наверху, и непрофессиональный подход с здравым смыслом. Он не отвечает напрямую на то, что вы просите, но он может работать.

Ответ 10

Этот код очищает консоль в BOTH Windows и Unix (хотя он действительно скомпилирован по-разному):

// 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__ */

Ответ 11

Не было бы

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

очистить экран во всех ОС?

Ответ 12

Это должно работать, если вы работаете на консоли

#include <conio.h>

int main()

{
    clrscr();
}