C/C++ 控制台窗口光标移动位置实现(Linux/Windows)

Linux 为打印控制字符实现

Windows 为WINAPI控制台接口实现

功能:

移动到上一行

移动到下一行

定位控制台光标位置到指定X,Y坐标

cpp 复制代码
    static bool MoveConsoleCursorPositionToPreviousNextLine(bool previous, int line) noexcept {
        if (line < 0) {
            return false;
        }

        if (line == 0) {
            return true;
        }

#ifdef _WIN32
        CONSOLE_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);
#else
        return ::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 _WIN32
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        if (NULL == hConsole) {
            return false;
        }

        COORD coord = { (SHORT)x, (SHORT)y };
        return ::SetConsoleCursorPosition(hConsole, coord);
#else
        return ::fprintf(stdout, "\033[%d;%dH", x, y) > 0;
#endif
    }
相关推荐
hansang_IR19 分钟前
【题解】LC:Z 算法(Z Algorithm)
c++·算法·字符串
三言老师27 分钟前
文本工具组合统计服务器日志数据
linux·运维·服务器
天空'之城40 分钟前
C 语言工业级通用组件手写 21:限幅消抖滤波
c语言·嵌入式算法·工业级组件·限幅消抖滤波
Aurorar0rua42 分钟前
CS50 x 2024 Notes Algorithms - 07
c语言·开发语言·学习方法
mounter6251 小时前
认识 Tetragon:基于 eBPF 的安全监控与强制执行工具
linux·ebpf·cve·kernel
神罚天下ET1 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
海清河晏1112 小时前
Qt 实战:信号与槽+事件系统
开发语言·c++·qt
aixingkong9212 小时前
AI超节点Scale Up域总线各层优化设计
linux·服务器·网络
啦啦啦啦啦zzzz3 小时前
设计模式:原型模式
c++·设计模式·原型模式
小保CPP3 小时前
OpenCV C++基于CNN模型的场景文本检测(OCR)
c++·人工智能·opencv·计算机视觉·cnn·ocr·光学字符识别