我怎么能在gcc中实现gotoxy()

我在Ubuntu使用gcc ,所以我编译并在terminal中执行。 但在网上编程比赛中,他们需要输出如图所示。

要求的输出

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

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

假设因为这是一个比赛,他们不需要像ncurses这样的依赖关系,你可以尝试在内存中执行它。

设置2维数组的char – 行和列 – 说24×80。 编写你自己的gotoxy()版本,它将值赋给正确的单元格。 完成绘图后,打印出行数组。

除了ANSI转义序列,您可能希望调查ncurses:

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

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

conio.h API更像是一个固定的控制台,Unix就像你通常处理终端一样的系统,比如可调整大小的X-Terminals。

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

在内存中构建了一个字符串数组之后, 做一个循环打印每一行(并释放你分配的内存)。

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

由于它还没有在这里,我只想说一个使用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转义序列用于“ 控制视频文本终端上的格式化,颜色和其他输出选项 ”