我在论坛上看到很多人告诉避免使用该system()
功能,例如system("cls")
. 我不明白为什么。
请告诉我为什么我应该避免这个功能。而且,由于clrscr()
不能与 CodeBlocks 一起使用,还有哪些其他方法可以在不使用该system()
功能的情况下清除屏幕?
这里有多个问题:
system()
作为一个功能是跨平台的,不仅在 Windows 或 Linux 上可用。但是,实际调用的程序可能取决于平台。例如,您可以使用system()
创建目录:system("md Temp")
. 这仅适用于 Windows,因为 Linux 不知道名为md
. 对于 Linux,它必须是system("mkdir Temp")
. 这种情况会持续下去,因此您需要为每个平台定制一个解决方案。如果您只是在一个平台上进行一些快速测试,那么使用system()
非常好,但您不应该在生产环境中使用它,除非您真的必须这样做。例如,您可以允许用户设置然后执行的外部程序。对于这样system()
的事情非常好。
有一个关于system()
使用的答案。并且没有标准的 C++ 方法来清除控制台窗口。对于 Windows 平台,您可以使用这样的代码:
void clear()
{
COORD startPos = { 0, 0 };
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(hConsole, &screen);
FillConsoleOutputCharacterA(hConsole, ' ', screen.dwSize.X * screen.dwSize.Y, startPos, &written);
FillConsoleOutputAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, startPos, &written);
SetConsoleCursorPosition(hConsole, startPos);
}
而对于 linux,从未尝试过,但找到了方法:
#include <curses.h>
erase();
您应该避免系统调用,因为
如何清除控制台?您可以使用std::cout << std::string(50, '\n');