【发布时间】:2019-10-30 05:29:53
【问题描述】:
我在 Ubuntu 18.04 上使用 GCC。
我希望文本是不同的颜色。
例如:
printf("hello world");
我尝试使用 conio.h,但编译器给我一个 conio.h 不可用的错误。我怎样才能实现它?
【问题讨论】:
标签: c
我在 Ubuntu 18.04 上使用 GCC。
我希望文本是不同的颜色。
例如:
printf("hello world");
我尝试使用 conio.h,但编译器给我一个 conio.h 不可用的错误。我怎样才能实现它?
【问题讨论】:
标签: c
终端通常(甚至在 Windows 上)由Ansi Escape codes 控制。您可以使用它们来控制输出颜色或光标的位置。请参阅:How to make win32 console recognize ANSI/VT100 escape sequences? 和 https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
【讨论】:
<conio.h> 适用于 Windows。在 Linux 中,您将一些控制代码放入字符串中。
大多数资料都描述了如何在 bash 中执行此操作(例如 How to change the output color of echo in Linux),但您可以在 C 中轻松使用它。所以首先您可以使用 hexdump 来获取 bash 中的序列如何转换为字符串:
$ echo -e "\033[0;31m" foo #this print foo in red
foo
$ echo -e "\033[0;31m" foo | hexdump -C
00000000 1b 5b 30 3b 33 31 6d 20 66 6f 6f 0a |.[0;31m foo.|
0000000c
如您所见,只需将第一部分更改为二进制代码 0x1b。
最后我用 C 写代码:
#include <stdio.h>
int main () {
printf("%c[0;31mFOO\n", 0x1b);
return 0;
}
它以红色打印 FOO。实际上它不会改变颜色,但我不在乎,因为我有颜色提示。 :)
【讨论】: