如何在c程序中加粗文本

How to bold text in c program

如何加粗我的 PrintF? ..(我是 C 的新手)

#include <stdio.h>

int main() {
    int i;
    for (i=1; i<=5; i++) {
        printf("Md.Mehedi hasan");
    }
    return 0;
}

如果您的终端支持 ANSI 转义序列,您可以这样做:

#include <stdio.h>

int main(void)
{
    for(int i = 1; i <= 5; i++)
        printf("\e[1mMd.Mehedi hasan\e[m");
    return 0;
}

\e为ESC字符(ASCII 27或0x1B),ESC [ 1 m设置粗体,ESC [ m重置显示属性,即重置粗体。

在 Linux Ubuntu 18.04 的终端中测试。

为了提高可读性,使用一些字符串文字宏来表示颜色和格式代码,如下所示:

#include <stdio.h>

#define COLOR_BOLD  "\e[1m"
#define COLOR_OFF   "\e[m"

int main(void)
{
    for (int i = 1; i <= 5; i++)
    {
        printf(COLOR_BOLD "Md.Mehedi hasan\n" COLOR_OFF);
    }

    return 0;
}

构建并运行命令:

mkdir -p bin && \
gcc -Wall -Wextra -Werror -O3 -std=c17 printf_bold_and_colors.c -o bin/a && \
bin/a

这里有一些来自我的 bash 代码的更多示例:https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh#L126-L138:

# ANSI Color Code Examples to help make sense of the regex expressions below
# Git config color code descriptions; see here:
# 
# ---------------    ----------------------------------------------------------------
#                    Git config color code desription
# ANSI Color Code    Order: text_color(x1) background_color(x1) attributes(0 or more)
# ----------------   ----------------------------------------------------------------
# 3[m             # code to turn off or "end" the previous color code
# 3[1m            # "white"
# 3[31m           # "red"
# 3[32m           # "green"
# 3[33m           # "yellow"
# 3[34m           # "blue"
# 3[36m           # "cyan"
# 3[1;33m         # "yellow bold"
# 3[1;36m         # "cyan bold"
# 3[3;30;42m      # "black green italic" = black text with green background, italic text
# 3[9;30;41m      # "black red strike" = black text with red background, strikethrough line through the text

您可以将 3(八进制 33)替换为 \e,因为它们的含义相同,只是表示形式不同。参见:https://en.wikipedia.org/wiki/ASCII#Control_code_chart.

有关更多颜色和格式数字代码,请参阅此处 table:https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

您可以使用多个格式编号,用分号 (;) 分隔它们,如下例所示。

C 中的几个非常酷的示例:

// 1 = bold; 5 = slow blink; 31 = foreground color red
// 34 = foreground color blue
// See: https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
#define COLOR_BOLD_SLOW_BLINKING      "\e[1;5m"
#define COLOR_BOLD_SLOW_BLINKING_RED  "\e[1;5;31m"
#define COLOR_BOLD_BLUE               "\e[1;34m"

// Make "hello" bold and slow blinking and red, and "world" just bold and blue
printf(COLOR_BOLD_SLOW_BLINKING_RED "hello " COLOR_OFF 
       COLOR_BOLD_BLUE "world\n" COLOR_OFF);

更进一步

  1. 运行 在我的 eRCaGuy_hello_world repo here: printf_bold_and_colors.c
  2. 中使用闪烁文本和交替 even/odd 颜色模式的更多 ANSI 颜色代码文本着色和格式示例

参考资料

  1. Gif工具(我是如何制作上面的gif动图的):
    1. 用OBS studio录屏;按照本教程进行部分屏幕截图:https://www.youtube.com/watch?v=ypMDvZ_Jgl4
    2. .mkv 视频转换为.gif ffmpeg -i in.mp4 out.gif, per my comment here.