【问题标题】:How to underline text using printf in C如何在 C 中使用 printf 为文本添加下划线
【发布时间】:2015-06-05 20:23:43
【问题描述】:

我注意到问题Colorful text using printf in C 给出了在 Windows 的标准控制台输出上设置彩色文本的一个很好的例子。有没有类似的东西可以让输出加下划线?或者甚至可能是粗体或斜体?

编辑:我尝试了 Lundin 关于使用 COMMON_LVB_UNDERSCORE 的回答,但没有成功。尝试使用 AddFontResource() 添加 arial 斜体字体以尝试斜体会出现错误,即存在 undefined reference to __imp_AddFontResourceA

【问题讨论】:

    标签: c windows winapi console


    【解决方案1】:

    使用任何标准 C 函数都无法做到这一点,因为 C 语言甚至无法识别屏幕的存在。

    使用 Windows API console functions,您可以更改颜色、下划线和其他一些内容。您正在寻找的特定功能称为SetConsoleTextAttribute,就像您链接的帖子中一样。将其attributes 更改为包含COMMON_LVB_UNDERSCORE

    【讨论】:

    • 在我的 win7 系统上不走运,打开该选项后,所有 printf() 字符串字符都打印为空格,换行符除外 :(
    • @Toby 嗯,看起来是这样。自从我使用这些功能以来已经很久了。我会做一些研究,看看能不能找出原因。
    • COMMON_LVB_* 属性仅在控制台使用DBCS codepage 时用于CHAR_INFO 属性。
    【解决方案2】:

    您可以在某些环境中运行您的程序,终端接受ANSI escape codes

    (我没用过windows——因为我只用linux——所以我不知道如何在windows中设置这样的环境;但听说可以)

    对于 ANSI 转义码,下划线是 "\e[4m"\e 是 ASCII ESCAPE 字符。

    【讨论】:

      【解决方案3】:

      也许尝试使用 termcaps。像这样的东西(在初始化 termcaps 之后):

      printf(tgetstr("us", NULL)); /* underline on */
      printf(""/* your string */);
      printf(tgetstr("ue", NULL)); /* underline off */
      

      或更简洁:

      printf("%s/* your text here */%s", tgetstr("us", NULL), tgetstr("ue", NULL));
      

      https://www.gnu.org/software/termutils/manual/termcap-1.3/html_node/termcap_34.html

      【讨论】:

        【解决方案4】:

        '\r' 序列与换行符 ('\n') 的不同之处在于它将光标移动到 输出当前行的开头,而不是下一行的开头。使用 '\r' 使程序能够创建包含多个字符的文件 在一行位置。

        这会打印带下划线的文本 printf("\f\t\t\t最终报告\r\t\t\t____________\n");

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-29
          • 2012-04-18
          • 2011-04-13
          • 1970-01-01
          • 2012-09-07
          • 2013-02-21
          • 2011-06-23
          相关资源
          最近更新 更多