我怎么能在gcc中实现gotoxy()

时间:2011-08-24 03:10:59

标签: c gcc compiler-construction ubuntu conio

我在 ubuntu .so中使用 gcc ,我在终端中编译并执行。但在线编程竞赛中,他们需要输出,如图所示。

required output

为此,如果我使用 TURBOC ,我可以使用 conio.h 使用 gotoxy()来获取螺旋格式的输出。 但是在Ubuntu中,我怎么能实现这个目标?

5 个答案:

答案 0 :(得分:5)

假设因为这是一场比赛并且他们不想要像ncurses这样的依赖,你可以尝试在内存中进行。

设置char的二维数组 - 行和列 - 比如24x80。编写自己的gotoxy()版本,将值分配到正确的单元格中。完成绘图后,打印出一系列线条。

答案 1 :(得分:4)

使用ncurses库。

以下是一个改编自http://www.paulgriffiths.net/program/c/srcs/curhellosrc.html

的示例
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>

int main(void) {
    WINDOW * mainwin;

    /*  Initialize ncurses  */

    if ( (mainwin = initscr()) == NULL ) {
        fprintf(stderr, "Error initialising ncurses.\n");
        exit(EXIT_FAILURE);
    }

    move(10, 15);
    addch('X');
    refresh();

    getch();

    delwin(mainwin);
    endwin();
    refresh();

    return EXIT_SUCCESS;
}

有关详细信息,请访问:http://invisible-island.net/ncurses/ncurses-intro.html#stdscr

答案 2 :(得分:1)

ANSI escape sequences之外,您可能希望调查ncurses:

http://www.gnu.org/s/ncurses/

这一切最终取决于运行程序的终端的功能,而不是实际的主机,语言或库。考虑将程序输出重定向到文件或打印机的情况。

conio.h API更多地与固定控制台有关,使用类似Unix的系统可以处理更多变化的终端,例如可调整大小的X终端。

答案 3 :(得分:1)

确定您需要多少行输出。分配一个“char *”数组,每行输出需要一个条目。当您放置一个数字时,使用“realloc()”来增加该行的大小,并使用空格从旧端填充到新端(如有必要);然后将你的号码放在该行的正确位置(在内存中)。

在内存中构建一个字符串数组后;做一个打印每一行的for循环(并释放你分配的内存)。

您不需要“gotoxy()”或其他任何东西来控制光标位置。

答案 4 :(得分:0)

由于还没有,我只是想说一下使用ANSI转义序列作为Steve-o提到的示例。

void gotoxy(int x, int y)
{
    printf("%c[%d;%df", 0x1B, y, x);
}

我是从here得到的。

0x1B是十六进制的十六进制,是ESC的ASCII。逃逸序列从它开始

%m;%nf将光标移动到行n,列m。

ANSI转义序列使用“to control the formatting, color, and other output options on video text terminals