【问题标题】:GNU/Linux replacements for Turbo C functions `clrscr` and `cprintf`Turbo C 函数 `clrscr` 和 `cprintf` 的 GNU/Linux 替代品
【发布时间】:2011-08-16 14:36:31
【问题描述】:

我刚搬到 Linux 一个月。我使用 Borland Turbo C 进行 C 编程,但其中一些函数在 GNU/Linux 中不起作用,因此寻求帮助。

这些是我想替换的一些功能:
- 高氧
- cprintf
- clrscr
- initgraph/graphics.h

我希望能提供一些代码示例来展示如何使用任何替换。

【问题讨论】:

  • 另外,那是一个古老的编译器。有很多现代替代品更好,更符合标准。

标签: c linux gcc ncurses


【解决方案1】:

在 linux 中,您可以使用 ncurses 库将终端用作文本缓冲区:移动光标并写入文本。它还可以绘制窗口和其他高级小部件。

对于gotoxy,请参阅来自 ncurses (link) 的 movewmove。 对于cprintf,请参阅printw。 只需clear()即可清屏。

在 ncurses 中,您还需要在 printwclear() 之后使用 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 类似的体验,您可能正在寻找directfbsvgalib。 如果你想在窗口中渲染图形,SDL 会很有帮助。

【讨论】:

  • 对于 clrscrcprintf 的一些代码将不胜感激
  • 我用 clrscrcprintfgotoxy 的 ncurses 版本编辑了答案。
【解决方案2】:

您引用的函数是 Borland 的控制台应用程序专有库的一部分。你想了解ncurses

【讨论】:

  • clrscrcprintf 的一些代码将不胜感激!
【解决方案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);
    }
    

    简单的方法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多