如何在控制台中修改文本字号?已实现文本变色与加粗
控制台文本字号修改方法
控制台文本字号的调整依赖终端对特定转义序列的支持,不同终端(比如Windows Terminal、GNOME Terminal、xterm)的兼容情况有差异,以下是两种常见实现方式:
1. 利用ANSI SGR序列(有限支持)
部分终端支持通过SGR(Select Graphic Rendition)序列调整字号,比如:
- 小号字体:使用
\e[2m(部分终端中该序列表示"淡色",但部分会同时缩小字号) - 恢复默认:使用
\e[m(你已定义的COLOR_OFF)
修改你的代码示例:
#include <stdio.h> #define COLOR_BOLD "\e[1m" #define COLOR_OFF "\e[m" #define CYAN "\033[36m" #define SMALL_FONT "\e[2m" int main(void) { printf(SMALL_FONT COLOR_BOLD CYAN "Hello (Small Bold Cyan)\n" COLOR_OFF); printf(COLOR_BOLD CYAN "Hello (Normal Bold Cyan)\n" COLOR_OFF); }
2. 利用OSC命令(更通用的字号控制)
多数现代终端(如Windows Terminal、xterm、Konsole)支持OSC(Operating System Command)序列直接指定字体字号,格式为:\e]50;Font=<字体名称>:size=<字号>\a
其中:
\e]是OSC序列的起始标记50是设置字体的命令码<字体名称>替换为终端支持的字体(比如Consolas、Monospace)<字号>替换为你需要的数值(比如12、16)\a是ASCII BEL字符,用于结束OSC序列
修改你的代码示例:
#include <stdio.h> #define COLOR_BOLD "\e[1m" #define COLOR_OFF "\e[m" #define CYAN "\033[36m" #define SET_FONT_SIZE_16 "\e]50;Font=Consolas:size=16\a" #define SET_FONT_DEFAULT "\e]50;Font=Consolas:size=12\a" int main(void) { printf(SET_FONT_SIZE_16); printf(COLOR_BOLD CYAN "Hello (Size 16 Bold Cyan)\n" COLOR_OFF); printf(SET_FONT_DEFAULT); printf(COLOR_BOLD CYAN "Hello (Default Size Bold Cyan)\n" COLOR_OFF); }
注意事项
- OSC命令会修改终端全局的字体字号,而非仅针对当前输出文本;若需局部调整,部分终端支持结合SGR的"替代字体"序列(如
\e[11m到\e[19m),但兼容性较差。 - 若使用Windows传统
cmd.exe,上述转义序列可能不生效,需改用Windows API(如SetConsoleFontSize)实现。
内容的提问来源于stack exchange,提问作者12iq
相关产品推荐
相关产品推荐

