我在 ubuntu .so中使用 gcc ,我在终端中编译并执行。但在线编程竞赛中,他们需要输出,如图所示。
为此,如果我使用 TURBOC ,我可以使用 conio.h 使用 gotoxy()来获取螺旋格式的输出。 但是在Ubuntu中,我怎么能实现这个目标?
答案 0 :(得分:5)
假设因为这是一场比赛并且他们不想要像ncurses这样的依赖,你可以尝试在内存中进行。
设置char的二维数组 - 行和列 - 比如24x80。编写自己的gotoxy()
版本,将值分配到正确的单元格中。完成绘图后,打印出一系列线条。
答案 1 :(得分: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
答案 2 :(得分:1)
除ANSI escape sequences之外,您可能希望调查ncurses:
这一切最终取决于运行程序的终端的功能,而不是实际的主机,语言或库。考虑将程序输出重定向到文件或打印机的情况。
conio.h
API更多地与固定控制台有关,使用类似Unix的系统可以处理更多变化的终端,例如可调整大小的X终端。
答案 3 :(得分:1)
确定您需要多少行输出。分配一个“char *”数组,每行输出需要一个条目。当您放置一个数字时,使用“realloc()”来增加该行的大小,并使用空格从旧端填充到新端(如有必要);然后将你的号码放在该行的正确位置(在内存中)。
在内存中构建一个字符串数组后;做一个打印每一行的for循环(并释放你分配的内存)。
您不需要“gotoxy()”或其他任何东西来控制光标位置。
答案 4 :(得分:0)
由于还没有,我只是想说一下使用ANSI转义序列作为Steve-o提到的示例。
void gotoxy(int x, int y)
{
printf("%c[%d;%df", 0x1B, y, x);
}
我是从here得到的。
0x1B
是十六进制的十六进制,是ESC的ASCII。逃逸序列从它开始
%m;%nf
将光标移动到行n,列m。
ANSI转义序列使用“to control the formatting, color, and other output options on video text terminals”