我在ubuntu .so中使用gcc ,我在终端中编译和执行。但是在在线编程竞赛中,他们需要如图所示的输出。
为此,如果我使用TURBOC ,我可以使用conio.h使用gotoxy()来获得输出的螺旋格式。但是在 Ubuntu 中,我怎么能做到这一点?
我在ubuntu .so中使用gcc ,我在终端中编译和执行。但是在在线编程竞赛中,他们需要如图所示的输出。
为此,如果我使用TURBOC ,我可以使用conio.h使用gotoxy()来获得输出的螺旋格式。但是在 Ubuntu 中,我怎么能做到这一点?
假设因为这是一场比赛并且他们不想要像 ncurses 这样的依赖项,您可以尝试在内存中进行。
设置二维字符数组 - 行和列 - 比如说 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-Terminals。
确定您需要多少行输出。分配一个“char *”数组,每行输出一个条目。当您放置一个数字时,使用“realloc()”来增加行的大小并用空格从旧端填充到新端(如果需要);然后将您的号码放在该行的正确位置(在内存中)。
在内存中构建字符串数组之后;执行一个打印每一行的 for 循环(并释放您分配的内存)。
您不需要“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 转义序列用于“控制视频文本终端上的格式、颜色和其他输出选项”