【问题标题】:How could I achieve gotoxy() in gcc我如何在 gcc 中实现 gotoxy()
【发布时间】:2011-08-24 03:10:59
【问题描述】:

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

为此,如果我使用 TURBOC 我可以使用 conio.h 使用 gotoxy() 来获得 螺旋格式 的输出。 但是在 Ubuntu 中,我该如何实现呢?

【问题讨论】:

  • 我认为你应该提前弄清楚每个数字的去向(即数字的顺序,从左到右,从上到下,以及中间的空格数),然后只输出所有文本。如果只是“到屏幕上的这个位置写数字,那不会是一个有趣的问题;编程竞赛从根本上讲是关于设计,而不是实现。

标签: c gcc compiler-construction ubuntu conio


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用 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

    【讨论】:

      【解决方案3】:

      除了ANSI escape sequences,您可能希望调查 ncurses:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          我是从 here 那里得到的。

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-27
            • 1970-01-01
            • 1970-01-01
            • 2014-02-06
            相关资源
            最近更新 更多