C语言textbackground函数如何设置文本背景色?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 C语言 正文

这是一个在 C 语言初学者中非常常见,但在现代开发中已基本被淘汰的函数,理解它对于学习计算机图形学的历史和原理非常有帮助。

c语言textbackground
(图片来源网络,侵删)

textbackground 是什么?

textbackground 是一个 控制台文本模式 下的函数,它的作用是设置后续输出文本的背景颜色

它不是 C 语言标准库(ANSI C)的一部分,而是 Borland C++ (Turbo C) 等 DOS 时代编译器 提供的一个特定于平台的库函数,这个函数定义在头文件 <conio.h> 中。

如何使用 textbackground

要使用 textbackground,你需要包含 <conio.h> 头文件,它的使用非常简单。

函数原型

void textbackground(int newcolor);
  • 参数: newcolor 是一个整数值,代表你想要设置的背景颜色,这个值通常使用预定义的宏来表示,以提高代码可读性。
  • 返回值: 无。

颜色常量

<conio.h> 头文件中定义了一系列表示颜色的宏:

c语言textbackground
(图片来源网络,侵删)
颜色 宏定义 数值
黑色 BLACK 0
蓝色 BLUE 1
绿色 GREEN 2
青色 CYAN 3
红色 RED 4
洋红色 MAGENTA 5
棕色 BROWN 6
浅灰色 LIGHTGRAY 7
深灰色 DARKGRAY 8
亮蓝色 LIGHTBLUE 9
亮绿色 LIGHTGREEN 10
亮青色 LIGHTCYAN 11
亮红色 LIGHTRED 12
亮洋红色 LIGHTMAGENTA 13
黄色 YELLOW 14
白色 WHITE 15

配套函数:textcolor

textbackground 通常与 textcolor 函数一起使用,textcolor 用来设置文本(字符)本身的颜色。

应用示例

下面的代码展示了如何使用 textbackgroundtextcolor 在控制台输出不同颜色的文本。

#include <stdio.h>
#include <conio.h> // 包含 conio.h 头文件
int main() {
    // 设置背景为蓝色,文本为白色
    textbackground(BLUE);
    textcolor(WHITE);
    // clrscr(); // 这是一个清屏函数,也在 conio.h 中,用于清空控制台
    printf("Hello, World! (背景: 蓝色, 文本: 白色)\n");
    // 改变设置:背景为红色,文本为黄色
    textbackground(RED);
    textcolor(YELLOW);
    printf("This text has a red background and yellow color.\n");
    // 改变设置:背景为绿色,文本为黑色
    textbackground(GREEN);
    textcolor(BLACK);
    printf("And this one is green with black text.\n");
    // 恢复默认设置(通常是黑底白字)
    textbackground(BLACK);
    textcolor(WHITE);
    printf("This is back to the default.\n");
    // 注意:getchar() 用于暂停程序,以便你看到输出结果
    // 在某些现代IDE中,控制台窗口会立即关闭
    printf("Press any key to exit...");
    getch(); // 也是 conio.h 中的函数,等待用户按下一个键
    return 0;
}

为什么 textbackground 现在很少使用了?

textbackground 的核心问题是它的可移植性极差

  1. 平台特定:它源于 DOS 时代的 Borland/Turbo C 编译器,在 Windows 平台上,它可以通过一些旧版本的编译器(如 Turbo C++ for Windows)或模拟环境(如 DOSBox)来运行,但在 Linux、macOS 以及现代的 Windows 控制台 中,这个函数是完全不可用的。
  2. 标准缺失:C 语言标准库(ISO C/ANSI C)中并没有定义 conio.h 以及其中的任何函数(如 textbackground, textcolor, clrscr, getch 等),这意味着任何依赖这些函数的代码都不能算是标准的 C 语言程序。
  3. 现代替代方案:现代操作系统提供了更强大、更灵活的方式来控制终端颜色,通常是 ANSI 转义码

现代的跨平台替代方案:ANSI 转义码

几乎所有的现代终端(包括 Windows 10/11 的新版控制台、Linux 终端、macOS Terminal)都支持 ANSI 转义码,这是一种通过在字符串中插入特定序列来控制文本格式(颜色、光标位置等)的国际标准。

c语言textbackground
(图片来源网络,侵删)

工作原理

格式为:\033[\e[ 后面跟格式代码,最后以 m

  • \033 是 ASCII 码中的转义字符。
  • [ 是开始标记。
  • m 表示“设置图形属性”(如颜色)结束。

颜色代码

  • 文本颜色: 3 + 颜色代码 (30-37)
  • 背景颜色: 4 + 颜色代码 (40-47)
颜色 文本代码 背景代码
黑色 30 40
红色 31 41
绿色 32 42
黄色 33 43
蓝色 34 44
洋红色 35 45
青色 36 46
白色 37 47

使用 ANSI 转义码重写示例

下面的代码是跨平台的,可以在任何支持 ANSI 转义码的现代终端中运行。

#include <stdio.h>
// 定义一些宏来简化代码
#define KRED     "\x1B[31m"
#define KGREEN   "\x1B[32m"
#define KYELLOW  "\x1B[33m"
#define KBLUE    "\x1B[34m"
#define KMAGENTA "\x1B[35m"
#define KCYAN    "\x1B[36m"
#define KWHITE   "\x1B[37m"
#define KBLACK   "\x1B[30m"
#define BRED     "\x1B[41m"
#define BGREEN   "\x1B[42m"
#define BYELLOW  "\x1B[43m"
#define BBLUE    "\x1B[44m"
#define BMAGENTA "\x1B[45m"
#define BCYAN    "\x1B[46m"
#define BWHITE   "\x1B[47m"
#define BBLACK   "\x1B[40m"
#define RESET    "\x1B[0m" // 重置所有格式
int main() {
    printf("Hello, World! (%s背景: 蓝色, 文本: 白色%s)\n", BBLUE, KWHITE, RESET);
    printf("%sThis text has a red background and yellow color.%s\n", BRED, KYELLOW, RESET);
    printf("%sAnd this one is green with black text.%s\n", BGREEN, KBLACK, RESET);
    printf("This is back to the default.\n");
    // 也可以组合使用
    printf("%sThis is bold red text on a green background!%s\n", "\x1B[1;31m", "\x1B[42m", RESET);
    printf("\nPress Enter to exit...");
    getchar(); // 标准C函数,等待用户输入
    return 0;
}
特性 textbackground (conio.h) ANSI 转义码
时代 DOS / 16位 Windows 现代 (Win10+, Linux, macOS)
平台 非跨平台,仅限旧环境 高度跨平台
标准 非标准 C 国际标准 (ECMA-48)
依赖 需要 <conio.h> 仅需标准 <stdio.h>
可移植性
推荐度 不推荐用于任何新项目 强烈推荐

虽然 textbackground 是学习 C 语言历史和 DOS 编程的一个有趣知识点,但在今天进行任何形式的开发时,都应该避免使用它,请选择使用 ANSI 转义码 来为你的控制台应用程序添加颜色,因为它更现代、更强大、更可靠,并且是跨平台的。

-- 展开阅读全文 --
头像
36如何去掉dede里的标签?
« 上一篇 12-10
织梦arclist infolen参数如何正确使用?
下一篇 » 12-10

相关文章

取消
微信二维码
支付宝二维码