📅  最后修改于: 2023-12-03 15:24:08.539000             🧑  作者: Mango
在 C++ 控制台中,经常需要清除屏幕来展示新的内容。本文将介绍如何在 C++ 控制台中清除屏幕。
可以使用 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 操作系统中,可以使用 windows.h
头文件里的 FillConsoleOutputCharacter
和 FillConsoleOutputAttribute
函数来清除屏幕。在 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
函数,可以自己编写清屏函数。