5

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

所需输出

为此,如果我使用TURBOC ,我可以使用conio.h使用gotoxy()来获得输出的螺旋格式但是在 Ubuntu 中,我怎么能做到这一点?

4

5 回答 5

5

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

设置二维字符数组 - 行和列 - 比如说 24x80。编写您自己的版本gotoxy(),将值分配到适当的单元格中。绘制完成后,打印出线条数组。

于 2011-08-24T03:44:32.873 回答
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

于 2011-08-24T03:36:59.830 回答
1

除了ANSI 转义序列,您可能希望研究 ncurses:

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

这一切最终都取决于运行程序的终端的能力,而不是实际的主机、语言或库。考虑将程序输出重定向到文件或打印机会发生什么。

conio.hAPI 更多地与固定控制台有关,在类 Unix 系统中,您通常处理可以更加多样化的终端,例如可调整大小的 X-Terminals。

于 2011-08-24T03:36:08.817 回答
1

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

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

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

于 2011-08-24T03:42:38.040 回答
0

由于它还没有出现,我只想说一个使用 ANSI 转义序列的示例,正​​如Steve-o所提到的。

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

我从这里得到的。

0x1B是十进制的 27 的十六进制,是 ESC 的 ASCII。转义序列以它将

%m;%nf光标移动到第 n 行第 m 列开始。

ANSI 转义序列用于“控制视频文本终端上的格式、颜色和其他输出选项

于 2017-06-24T22:49:33.810 回答