Как я могу достичь gotoxy () в gcc - PullRequest
5 голосов
/ 24 августа 2011

Я использую gcc в Ubuntu . Поэтому, я компилирую и выполняю в терминал . Но в онлайн-конкурсе по программированию они требуют вывода, как показано на диаграмме.

required output

Для этого, если я использую TURBOC , я могу получить его, используя conio.h , используя gotoxy () , чтобы получить спиральный формат выход. Но в Ubuntu, как мне этого добиться?

Ответы [ 5 ]

5 голосов
/ 24 августа 2011

Если предположить, что это соревнование, и они не хотят таких зависимостей, как ncurses, вы можете попытаться сделать это в памяти.

Установить 2-мерный массив строк и столбцов - скажем, 24x80.Напишите свою собственную версию gotoxy(), которая присваивает значения в соответствующие ячейки.После завершения печати распечатайте массив линий.

4 голосов
/ 24 августа 2011

Используйте библиотеку 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

1 голос
/ 24 августа 2011

Определите, сколько строк вывода вам нужно.Выделите массив "char *" с одной записью на строку необходимого вывода.Когда вы помещаете число, используйте «realloc ()», чтобы увеличить размер строки и заполните от старого конца до нового конца пробелами (если необходимо);затем поместите ваш номер в нужное место в этой строке (в памяти).

После того, как вы построите массив строк в памяти;выполните цикл for, который печатает каждую строку (и освобождает выделенную память).

Вам не нужен "gotoxy ()" или что-либо еще для управления положением курсора.

1 голос
/ 24 августа 2011

Помимо escape-последовательностей ANSI вы можете захотеть исследовать ncurses:

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

Все это в конечном итоге зависит от возможностей терминала, на котором запущена программа,не фактический хост, язык или библиотека.Подумайте, что происходит, перенаправляя вывод программы в файл или на принтер.

conio.h API - это больше для фиксированной консоли, в Unix-подобных системах вы обычно работаете с терминалами, которые могут быть более разнообразными, такими как изменяемый размерX-терминалы.

0 голосов
/ 25 июня 2017

Поскольку его здесь еще нет, я просто хотел рассказать о примере использования escape-последовательностей ANSI, как упоминалось Steve-o .

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

Я получил это от здесь .

0x1B является шестнадцатеричным для 27 в десятичном виде и является ASCII для ESC. Escape-последовательности начинаются с него

%m;%nf перемещает курсор в строку n, столбец m.

escape-последовательности ANSI используются " для управления форматированием, цветом и другими параметрами вывода на видеотекстовых терминалах "

...