如何使用 C++ 清除 Windows 和 Linux 中的控制台
- 2024-11-08 09:04:00
- admin 原创
- 33
问题描述:
我需要一个用 C++ 编写的跨平台解决方案,用于清除 Linux 和 Windows 中的控制台。是否有任何函数可以执行此操作?另请注意,我不希望最终用户程序员必须更改我的程序中的任何代码才能使其清除 Windows 或 Linux(例如,如果必须在两个函数之间进行选择,则必须在运行时或编译时自主做出决定)。
解决方案 1:
在两个平台上没有通用命令来清除控制台。
#include <cstdlib>
void clear_screen()
{
#ifdef WINDOWS
std::system("cls");
#else
// Assume POSIX
std::system ("clear");
#endif
}
解决方案 2:
简短的回答是:你不能。
较长的答案:使用 curses 库(Unix 上为 ncurses, Windows 上为pdcurses)。NCurses 应该可以通过您的包管理器获得,并且 ncurses 和 pdcurses 都具有完全相同的界面(pdcurses 还可以独立于控制台创建行为类似于控制台窗口的窗口)。
最难的答案:使用#ifdef _WIN32
类似的东西让你的代码在不同的操作系统上有不同的表现。
解决方案 3:
在 Linux 上,可以清除控制台。最好的方法是将以下转义序列写入 stdout:
write(1,"E[HE[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:
简短回答
void cls(void)
{
system("cls||clear");
return;
}
长答案,请阅读:
系统(“暂停”)说明
解决方案 6:
所提出的问题是无法回答的,因为它施加了不可能的限制。“清除屏幕”在不同的操作系统上是一个非常不同的操作,而如何执行该操作则取决于操作系统。请参阅此常见问题答案,以完整解释如何在带有“控制台”的几个流行平台和带有“终端”的平台上执行此操作。您还会在同一位置找到一些要避免的常见错误的解释,其中一些 — 唉! — 已在上文中作为答案给出。
解决方案 7:
这是在任何其他平台上执行的操作,但它在 Windows 上不起作用:
cout << "";
也许您需要进行条件编译:
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 << "";
#endif
}
解决方案 8:
我知道这并没有回答我自己的问题,但是!这适用于 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);
}
解决方案 9:
其实,还有一种非常接近于清除屏幕的替代方法。您可以尝试使用重复新行的 for 循环。例如:
for (i = 0; i < 100000; i++)
{
printf ("
");
}
完成此循环后,终端将不允许您滚动回到顶部,这是一种不专业的做法,不符合常识。它不会直接回答您的问题,但它可以工作。
解决方案 10:
此代码清除 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(hOutput, topLeft);
}
#endif /* _WIN32 */
#ifdef __unix__
#include <stdio.h>
void clearScreen(void) {
printf("x1B[2J");
}
#endif /* __unix__ */
解决方案 11:
正如其他人已经说过的,不可能有一段相同的代码可以清除 Windows 和 Linux 上的控制台。
我还强烈建议不要使用std::system
:
它使你的程序容易受到攻击;如果有人用他们自己的恶意程序替换
clear
/怎么办?cls
由于上述原因,防病毒程序讨厌
std::system
。如果您的代码使用它,即使它本来是无害的,生成的二进制文件也可能被检测出病毒。(请注意,它实际上并不是无害的。)
这是我的解决方案:
#ifdef _WIN32
#include <Windows.h>
#endif
void clrscr() {
#ifdef _WIN32
COORD tl = { 0,0 };
CONSOLE_SCREEN_BUFFER_INFO s;
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(console, &s);
DWORD written, cells = s.dwSize.X * s.dwSize.Y;
FillConsoleOutputCharacter(console, ' ', cells, tl, &written);
FillConsoleOutputAttribute(console, s.wAttributes, cells, tl, &written);
SetConsoleCursorPosition(console, tl);
#else
std::cout << "[2J[1; 1H";
#endif
}
您可以按照上面显示的模式,以任何您喜欢的方式更改这两个代码段。
解决方案 12:
不会
for (int i=0;i<1000;i++){cout<<endl;}
清除所有操作系统的屏幕?
解决方案 13:
如果你在控制台上工作,这应该有效
#include <conio.h>
int main()
{
clrscr();
}
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件