5

私はubuntu.soでgccを使用していますが、ターミナルでコンパイルして実行します。しかし、オンラインプログラミングコンテストでは、図に示すような出力が必要です。

必要な出力

そのため、TURBOCを使用すると、conio.hを使用してgotoxy()を使用し、スパイラル形式の出力を取得できます。しかし、Ubuntuでは、どうすればこれを達成できますか?

4

5 に答える 5

5

これはコンテストであり、ncurses のような依存関係を望んでいないため、メモリ内で実行することができます。

文字の 2 次元配列 (行と列) を設定します。たとえば、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端末など、より多様な端末を通常処理します。

于 2011-08-24T03:36:08.817 に答える
1

必要な出力行数を決定します。必要な出力行ごとに 1 つのエントリを持つ「char *」の配列を割り当てます。数字を配置するときは、「realloc()」を使用して行のサイズを増やし、古い端から新しい端までスペースで埋めます (必要な場合)。次に、その行の適切な場所 (メモリ内) に番号を入力します。

メモリ内に文字列の配列を作成した後。各行を出力する for ループを実行します (そして、割り当てたメモリを解放します)。

カーソル位置を制御するために「gotoxy()」などは必要ありません。

于 2011-08-24T03:42:38.040 に答える
0

まだここにないので、 Steve-oが言及したANSI エスケープ シーケンスを使用した例について言いたかっただけです。

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

私はここからそれを手に入れました。

0x1B10 進数の 27 は 16 進数で、ESC は ASCII です。で始まるエスケープ シーケンス

%m;%nfは、カーソルを行 n、列 m に移動します。

ANSI エスケープ シーケンスは、 " ビデオ テキスト端末のフォーマット、色、およびその他の出力オプションを制御するために " 使用されます

于 2017-06-24T22:49:33.810 に答える