📜  如何在 C++ 控制台中清除屏幕 - C++ (1)

📅  最后修改于: 2023-12-03 15:24:08.539000             🧑  作者: Mango

如何在 C++ 控制台中清除屏幕 - C++

在 C++ 控制台中,经常需要清除屏幕来展示新的内容。本文将介绍如何在 C++ 控制台中清除屏幕。

方法一:使用 system 函数

可以使用 system 函数调用操作系统的清屏命令来清除屏幕。在 Windows 操作系统中,清屏命令是 cls;在 Linux 或 macOS 操作系统中,清屏命令是 clear

以下是在 Windows 操作系统中使用 system 函数清除屏幕的代码:

#include <cstdio>
#include <cstdlib>

int main() {
    std::printf("Hello, world!\n");
    std::system("cls");
    return 0;
}

以下是在 Linux 或 macOS 操作系统中使用 system 函数清除屏幕的代码:

#include <cstdio>
#include <cstdlib>

int main() {
    std::printf("Hello, world!\n");
    std::system("clear");
    return 0;
}

这种方法的优点是简单易懂,缺点是效率较低,而且不能跨平台。

方法二:使用 Windows API 或 POSIX API

在 Windows 操作系统中,可以使用 windows.h 头文件里的 FillConsoleOutputCharacterFillConsoleOutputAttribute 函数来清除屏幕。在 Linux 或 macOS 操作系统中,可以使用 POSIX API 函数 write 来清除屏幕。

以下是在 Windows 操作系统中使用 Windows API 清除屏幕的代码:

#include <cstdio>
#include <windows.h>

int main() {
    std::printf("Hello, world!\n");

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO info;
    GetConsoleScreenBufferInfo(handle, &info);
    COORD size = { info.srWindow.Right - info.srWindow.Left + 1, info.srWindow.Bottom - info.srWindow.Top + 1 };
    COORD pos = { 0, 0 };
    DWORD written;
    FillConsoleOutputCharacter(handle, L' ', size.X * size.Y, pos, &written);
    FillConsoleOutputAttribute(handle, info.wAttributes, size.X * size.Y, pos, &written);

    return 0;
}

以下是在 Linux 或 macOS 操作系统中使用 POSIX API 清除屏幕的代码:

#include <cstdio>
#include <unistd.h>

int main() {
    std::printf("Hello, world!\n");
    std::putc('\x1b', stdout);
    std::putc('[', stdout);
    std::putc('2', stdout);
    std::putc('J', stdout);
    std::flush(stdout);
    return 0;
}

这种方法的优点是效率较高,并且可以跨平台,缺点是代码比较冗长。

方法三:自己编写清屏函数

也可以自己编写一个清屏函数来清除屏幕。以下是一个简单的跨平台清屏函数:

#include <cstdio>
#include <cstdlib>

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif

void clear_screen() {
#ifdef _WIN32
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = { 0, 0 };
    DWORD written;
    CONSOLE_SCREEN_BUFFER_INFO info;
    GetConsoleScreenBufferInfo(handle, &info);
    FillConsoleOutputCharacter(handle, L' ', info.dwSize.X * info.dwSize.Y, pos, &written);
    FillConsoleOutputAttribute(handle, info.wAttributes, info.dwSize.X * info.dwSize.Y, pos, &written);
#else
    std::putc('\x1b', stdout);
    std::putc('[', stdout);
    std::putc('2', stdout);
    std::putc('J', stdout);
    std::flush(stdout);
#endif
}

int main() {
    std::printf("Hello, world!\n");
    clear_screen();
    return 0;
}
结论

以上介绍了三种在 C++ 控制台中清除屏幕的方法,每种方法都有其优缺点。如果只在 Windows 操作系统中使用,方法一最为简单直接;如果需要跨平台,方法二最为可靠高效;如果需要很多次清除屏幕,且不想反复使用 system 函数,可以自己编写清屏函数。