Linux 为打印控制字符实现
Windows 为WINAPI控制台接口实现
功能:
移动到上一行
移动到下一行
定位控制台光标位置到指定X,Y坐标
static bool MoveConsoleCursorPositionToPreviousNextLine(bool previous, int line) noexcept {if (line < 0) {return false;}if (line == 0) {return true;}#ifdef _WIN32CONSOLE_SCREEN_BUFFER_INFO csbi;HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);if (NULL == hConsole) {return false;}if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) {return false;}COORD pos{};pos.X = csbi.dwCursorPosition.X;pos.Y = previous ? csbi.dwCursorPosition.Y - 1 : csbi.dwCursorPosition.Y + 1;return SetConsoleCursorPosition(hConsole, pos);
#elsereturn ::fprintf(stdout, previous ? "\033[%dA" : "\033[%dB", line) > 0;
#endif}bool MoveConsoleCursorPositionToPreviousLine(int line) noexcept {return MoveConsoleCursorPositionToPreviousNextLine(true, line);}bool MoveConsoleCursorPositionToNextLine(int line) noexcept {return MoveConsoleCursorPositionToPreviousNextLine(false, line);}bool SetConsoleCursorPosition(int x, int y) noexcept {
#ifdef _WIN32HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);if (NULL == hConsole) {return false;}COORD coord = { (SHORT)x, (SHORT)y };return ::SetConsoleCursorPosition(hConsole, coord);
#elsereturn ::fprintf(stdout, "\033[%d;%dH", x, y) > 0;
#endif}