如何在C语言中隐藏控制台光标?

10

我有一个简单的C程序,它在控制台中表示加载屏幕,但是我无法隐藏光标。我尝试加快睡眠函数的速度,以便重置光标计时器并使光标消失,但这并不起作用。

有没有关于如何隐藏光标的提示?

代码:

#include <stdio.h>
#include <stdlib.h>

const int TIME = 1;

int main(int argc,char *argv[]){
    int i;
    while (1){
        printf("loading");
        for (i=0;i<3;i++){
            sleep(TIME);
            printf(".");
        }
        sleep(TIME);
        printf("\r");
        system("Cls");
        sleep(TIME);
    }
}

我认为在Windows/DOS上你需要使用conio.h,而不是system("cls")之类的命令,或许你还可以控制光标。在*nix操作系统中有一些控制字符可以实现这个功能,但我不知道在Windows中应该使用什么等效的方法。 - Iharob Al Asimi
可能是 Hide cursor on remote terminal 的重复问题。 - Aaron Critchley
@iharob,我不知道 conio.h 是做什么的,也不知道在使用它时正确的语句是什么。 - BRHSM
@AaronCritchley 我看到了那个问题,但是即使阅读了那个问题中的链接,我也不知道什么是远程终端。 - BRHSM
4个回答

28

针对 Bishal 的答案进行补充:

隐藏光标: printf("\e[?25l");

重新启用光标: printf("\e[?25h");

来源


对于使用此解决方案的人,需要注意:“\e”是非ISO标准转义序列。你可能想使用“\33”代替它,它做相同的事情但是符合ISO标准。 - Mahyar Mirrashed

10
将以下函数添加到您的程序中:
#include <windows.h>

void hidecursor()
{
   HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_CURSOR_INFO info;
   info.dwSize = 100;
   info.bVisible = FALSE;
   SetConsoleCursorInfo(consoleHandle, &info);
}

并在你的main中调用它。

更多信息请参阅MSDN


启动时光标会有一个小闪烁,但这会产生很酷的效果。就像你正在启动一个在启动时遇到一些问题的大型程序哈哈。 - BRHSM

1
printf("\e[?25l");

这应该可以工作!它来自ANSI字符表,其中的字符不仅是所见即所得。它们就像某种形式的命令一样运作。

0

这里有一个适用于Windows和Linux的解决方案:

#include <iostream>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#include <Windows.h>
#endif // _WIN32
using namespace std;

void show_console_cursor(const bool show) {
#if defined(_WIN32)
    static const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(handle, &cci);
    cci.bVisible = show; // show/hide cursor
    SetConsoleCursorInfo(handle, &cci);
#elif defined(__linux__)
    cout << (show ? "\033[?25h" : "\033[?25l"); // show/hide cursor
#endif // Windows/Linux
}

尊敬的先生,这是C语言而不是C++。 - user18256935

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接