Turbo C 函数 `clrscr` 和 `cprintf` 的 GNU/Linux 替代品
Posted
技术标签:
【中文标题】Turbo C 函数 `clrscr` 和 `cprintf` 的 GNU/Linux 替代品【英文标题】:GNU/Linux replacements for Turbo C functions `clrscr` and `cprintf` 【发布时间】:2011-08-16 14:36:31 【问题描述】:我刚搬到 Linux 一个月。我使用 Borland Turbo C 进行 C 编程,但其中一些函数在 GNU/Linux 中不起作用,因此寻求帮助。
这些是我想替换的一些功能: - 高氧 - cprintf - clrscr - initgraph/graphics.h
我希望能提供一些代码示例来展示如何使用任何替换。
【问题讨论】:
另外,那是一个古老的编译器。有很多现代替代品更好,更符合标准。 【参考方案1】:在 linux 中,您可以使用 ncurses 库将终端用作文本缓冲区:移动光标并写入文本。它还可以绘制窗口和其他高级小部件。
对于gotoxy
,请参阅来自 ncurses (link) 的 move
和 wmove
。
对于cprintf
,请参阅printw
。
只需clear()
即可清屏。
在 ncurses 中,您还需要在 printw
和 clear()
之后使用 refresh()
刷新屏幕。
示例程序,它使用了 ncurses 中提到的所有函数:
#include <curses.h>
int main(int argc, char *argv[])
initscr();
clear();
move(15, 20);
printw("Test program: %s", argv[0]);
refresh();
getch();
endwin();
return 0;
在 gcc 中编译:gcc program.c -lcurses
至于图形,您必须选择一个特定的库。 如果您需要与低级 graphics.h 类似的体验,您可能正在寻找directfb 或svgalib。 如果你想在窗口中渲染图形,SDL 会很有帮助。
【讨论】:
对于 clrscr 和 cprintf 的一些代码将不胜感激 我用clrscr
、cprintf
和 gotoxy
的 ncurses 版本编辑了答案。【参考方案2】:
您引用的函数是 Borland 的控制台应用程序专有库的一部分。你想了解ncurses。
【讨论】:
clrscr 和 cprintf 的一些代码将不胜感激!【参考方案3】:关于图形.h
关于在 Linux 中使用 graphics.h 是一件容易的事。一周前我遇到了同样的问题。好吧,你可以用搜索词“Linux 中的 graphics.h”来搜索,你会得到很多链接,这里是一个。
http://www.rajivnair.in/2007/07/graphicsh-in-gnulinux.html.
关于清屏
为此,您有很多选择。 一个是, 使用 system("clear") 但它需要 stdlib.h 并且性能较慢。 这里有两个链接给你...
How do I clear the console in BOTH Windows and Linux using C++
cprogramming.com
关于gotoxy 如 Michał Trybus 的回答中所述。
关于 cprintf
我参考了许多链接,但没有得到简单的答案。我也在等待这个答案。 但是,根据我的经验,每当我希望输出采用某种彩色格式时,我都会使用 graphics.h,尽管它不是必需的。这就是为什么我以前从来没有想过这个问题。 您可能会发现此链接很有用... codeguru.com
关于 getch 我想你可能已经知道了。您可以在 stdio.h 中使用 getchar(),而不是 conio.h 中的 getch()(不是 ansi 标准)。
【讨论】:
【参考方案4】:只是,我在另一个帖子中回答了同样的问题:
void gotoxy(int x, int y)
printf("%c[%d;%df",0x1B, y, x);
void clrscr(void)
fprintf(stdout, "\033[2J\033[0;0f");
fflush(stdout);
void textcolor(int attr, int fg, int bg)
printf("%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
简单的方法!
【讨论】:
以上是关于Turbo C 函数 `clrscr` 和 `cprintf` 的 GNU/Linux 替代品的主要内容,如果未能解决你的问题,请参考以下文章