私はubuntu.soでgccを使用していますが、ターミナルでコンパイルして実行します。しかし、オンラインプログラミングコンテストでは、図に示すような出力が必要です。
そのため、TURBOCを使用すると、conio.hを使用してgotoxy()を使用し、スパイラル形式の出力を取得できます。しかし、Ubuntuでは、どうすればこれを達成できますか?
私はubuntu.soでgccを使用していますが、ターミナルでコンパイルして実行します。しかし、オンラインプログラミングコンテストでは、図に示すような出力が必要です。
そのため、TURBOCを使用すると、conio.hを使用してgotoxy()を使用し、スパイラル形式の出力を取得できます。しかし、Ubuntuでは、どうすればこれを達成できますか?
これはコンテストであり、ncurses のような依存関係を望んでいないため、メモリ内で実行することができます。
文字の 2 次元配列 (行と列) を設定します。たとえば、24x80 です。gotoxy()
適切なセルに値を割り当てる独自のバージョンを記述します。プロットが完了したら、行の配列を出力します。
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
ANSIエスケープシーケンスとは別に、ncursesを調査することをお勧めします。
それはすべて、実際のホスト、言語、またはライブラリではなく、プログラムを実行している端末の機能に最終的に依存します。プログラム出力をファイルまたはプリンターにリダイレクトするとどうなるかを考えてみてください。
conio.h
APIは、固定コンソールと関係があります。Unixライクなシステムでは、サイズ変更可能なX端末など、より多様な端末を通常処理します。
必要な出力行数を決定します。必要な出力行ごとに 1 つのエントリを持つ「char *」の配列を割り当てます。数字を配置するときは、「realloc()」を使用して行のサイズを増やし、古い端から新しい端までスペースで埋めます (必要な場合)。次に、その行の適切な場所 (メモリ内) に番号を入力します。
メモリ内に文字列の配列を作成した後。各行を出力する for ループを実行します (そして、割り当てたメモリを解放します)。
カーソル位置を制御するために「gotoxy()」などは必要ありません。
まだここにないので、 Steve-oが言及したANSI エスケープ シーケンスを使用した例について言いたかっただけです。
void gotoxy(int x, int y)
{
printf("%c[%d;%df", 0x1B, y, x);
}
私はここからそれを手に入れました。
0x1B
10 進数の 27 は 16 進数で、ESC は ASCII です。で始まるエスケープ シーケンス
%m;%nf
は、カーソルを行 n、列 m に移動します。
ANSI エスケープ シーケンスは、 " ビデオ テキスト端末のフォーマット、色、およびその他の出力オプションを制御するために " 使用されます。