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
    }
相关推荐
tumu_C1 分钟前
C++模板:Ret(Arg...)的相关
开发语言·c++·算法
WL_Aurora5 分钟前
CentOS vs Ubuntu
linux·ubuntu·centos
大棉花哥哥7 分钟前
Linux 内核本地提权漏洞(CVE-2026-31431)
linux·运维·服务器
BatyTao9 分钟前
Ubuntu下载地址
linux·运维·ubuntu
HalvmånEver10 分钟前
MySQL视图
linux·数据库·学习·mysql·视图
huanworld10 分钟前
QT C++ UDP通信
c++·qt·udp
IMPYLH12 分钟前
Linux 的 truncate 命令
linux·运维·服务器·前端·bash
不知名的老吴13 分钟前
关于C++中的placement new
数据结构·c++·算法
铁皮哥15 分钟前
【后端开发】RabbitMQ、RocketMQ、Kafka 怎么选?我从业务场景重新梳理了一遍
java·linux·数据库·分布式·kafka·rabbitmq·rocketmq
东风微鸣16 分钟前
从 Windows 11 迁移到 Ubuntu 26.04:双系统安装与体验记录
linux·windows·ubuntu