如何将输入文本光标定位在C?

时间:2014-10-17 10:57:55

标签: c printing output

这里有一个非常简单的程序:

 printf("Enter your number in the box below\n");
 scanf("%d",&number);

现在,我希望输出看起来像这样:

 Enter your number in the box below
 +-----------------+
 | |*|             |
 +-----------------+

其中,| * |是用户输入值的闪烁光标。

由于C是线性代码,它不会打印盒子艺术,然后要求输出,它会打印顶行和左列,然后在输入后打印底行和右列。

所以,我的问题是,我可以先打印盒子,然后有一个功能将光标放回盒子里吗?

4 个答案:

答案 0 :(得分:18)

如果你在某个Unix终端(xtermgnome-terminal ...)下,你可以使用控制台代码:

#include <stdio.h>

#define clear() printf("\033[H\033[J")
#define gotoxy(x,y) printf("\033[%d;%dH", (x), (y))

int main(void)
{
    int number;

    clear();
    printf(
        "Enter your number in the box below\n"
        "+-----------------+\n"
        "|                 |\n"
        "+-----------------+\n"
    );
    gotoxy(3, 2);
    scanf("%d", &number);
    return 0;
}

或使用Box-drawing characters

printf(
    "Enter your number in the box below\n"
    "╔═════════════════╗\n"
    "║                 ║\n"
    "╚═════════════════╝\n"
);

更多信息:

man console_codes

答案 1 :(得分:8)

在linux终端中,您可以使用终端命令移动光标,例如

printf("\033[8;5Hhello"); // Move to (8, 5) and output hello

其他类似的命令:

printf("\033[XA"); // Move up X lines;
printf("\033[XB"); // Move down X lines;
printf("\033[XC"); // Move right X column;
printf("\033[XD"); // Move left X column;
printf("\033[2J"); // Clear screen

请注意,这不是标准化解决方案,因此您的代码不会独立于平台。

答案 2 :(得分:1)

C语言本身没有带光标的屏幕的概念。您将不得不使用某种提供此支持的库。 是最着名和最广泛使用的终端控制库。

答案 3 :(得分:0)

#include <conio.h>

void main() {
    char d;
    cprintf("*---------*\n\r|         |\n\r*---------*");
    gotoxy(4,2);
    scanf("%c",&d);
}

这适用于所有操作系统