我正在尝试用C语言将彩色文本输出到控制台。我知道您可以更改整个printf语句的颜色,但我想知道是否可以更改printf语句中单个字符的文本颜色。总之,我希望能够打印出“asdf”,其中a为红色,s为绿色,d为蓝色,F是橙子的,先谢谢你
qqrboqgw1#
我在周围找了一个临时工作:使用多个printf语句,因为它们不会转到下一行,我不太喜欢这个解决方案,所以如果有人有更好的解决方案,请发布它,如果它运行良好,我会接受它。
lkaoscv72#
首先,在C语言中,字符是没有颜色的,它们只是数字,所以你的问题和C语言没有任何关系,它根本不关心你如何打印。您所指的是,一些终端接受一些控制字符,以指定它们应该如何呈现发送给它们的内容。这些只是特殊字符,并不意味着要打印,而是要修改终端行为。无法保证您的终端理解这些控制字符。也无法保证它们与其他终端是相同的控制字符。一些库(如ncurses)具有您正在使用的终端的知识,并提供使其透明的帮助器函数。尽管如此,用红色打印的方法(至少是最常见的一种)是
printf("\033[31m");
将终端切换为红色
printf("\033[m");
开关又恢复正常了。这些都是控制字符,所以从C语言的Angular 来看,只是和其他字符一样的字符,要被打印出来,发送到终端,然后由终端来做它认为合适的事情。只是像其他字符,没有什么阻止你混合他们与任何正常的字符,你的例子
printf("\033[31ma\033[32ms\033[34md\033[33mf\033[m\n");
但是不能保证它能工作,你不能真的指望它,甚至不能保证它不会打印一些不需要的字符。
2条答案
按热度按时间qqrboqgw1#
我在周围找了一个临时工作:使用多个printf语句,因为它们不会转到下一行,我不太喜欢这个解决方案,所以如果有人有更好的解决方案,请发布它,如果它运行良好,我会接受它。
lkaoscv72#
首先,在C语言中,字符是没有颜色的,它们只是数字,所以你的问题和C语言没有任何关系,它根本不关心你如何打印。
您所指的是,一些终端接受一些控制字符,以指定它们应该如何呈现发送给它们的内容。这些只是特殊字符,并不意味着要打印,而是要修改终端行为。无法保证您的终端理解这些控制字符。也无法保证它们与其他终端是相同的控制字符。
一些库(如ncurses)具有您正在使用的终端的知识,并提供使其透明的帮助器函数。
尽管如此,用红色打印的方法(至少是最常见的一种)是
将终端切换为红色
开关又恢复正常了。
这些都是控制字符,所以从C语言的Angular 来看,只是和其他字符一样的字符,要被打印出来,发送到终端,然后由终端来做它认为合适的事情。
只是像其他字符,没有什么阻止你混合他们与任何正常的字符,
你的例子
但是不能保证它能工作,你不能真的指望它,甚至不能保证它不会打印一些不需要的字符。