gotoxy()我使用GCC在Ubuntu的。所以,我編譯和終端執行。但是在網絡編程比賽中,他們需要輸出如圖所示。我怎麼能實現GCC
對於這一點,如果我使用TURBOC我把它用CONIO.H使用gotoxy()得到輸出的螺旋格式可以得到。 但在Ubuntu中,我怎麼能做到這一點?
gotoxy()我使用GCC在Ubuntu的。所以,我編譯和終端執行。但是在網絡編程比賽中,他們需要輸出如圖所示。我怎麼能實現GCC
對於這一點,如果我使用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
拋開ANSI escape sequences您可能希望調查的ncurses:
這一切最終取決於運行程序,而不是實際的主機,語言或庫中的終端的功能。考慮將程序輸出重定向到文件或打印機會發生什麼情況。
conio.h
API更像是一個固定的控制檯,有了Unix系統,你通常會處理更多不同的終端,比如可調整大小的X-Terminals。
確定有多少行輸出需要。爲需要的每行輸出分配一個「char *」數組。當你放置一個數字時,使用「realloc()」來增加線條的大小,並用空格填充從舊的一端到新的一端(如果需要的話)。然後把你的號碼放在該行的正確位置(在內存中)。
在內存中構建了一個字符串數組後;做一個for循環,打印每一行(並釋放你分配的內存)。
你不需要「gotoxy()」或任何東西來控制光標位置。
假設因爲它是一個比賽,他們不想像ncurses這樣的依賴項,你可以嘗試在內存中執行它。
設置char - 行和列的二維數組 - 例如24x80。編寫你自己的gotoxy()
版本,它將值賦給正確的單元格。完成繪圖後,打印出行數組。
既然它還沒有出現,我只想說一個使用ANSI轉義序列的例子,如Steve-o所提到的。
void gotoxy(int x, int y)
{
printf("%c[%d;%df", 0x1B, y, x);
}
我從here得到它。
0x1B
是十進制的十六進制數27,是ESC的ASCII碼。轉義序列以它開始
%m;%nf
將光標移動到第n行第m列。
的ANSI轉義序列使用「to control the formatting, color, and other output options on video text terminals」
我想你應該提前計算的時間,其中每個數字熄滅(數字的,即順序,由左到右,上到-bottom和之間的空格數量),然後輸出所有文本。如果只是一個問題:「去屏幕上的這個位置寫下數字,它不會是一個有趣的問題;編程競賽基本上是關於設計而不是實現。 –