在C中使用printf的多彩文本

我想知道如何在控制台上打印丰富多彩的文字? 我使用eclipse win64 os。 这是否与编译器有关? 任何人都可以给一个简单的例子在C只是一个红色或任何颜色的问候世界文本?

我知道这在C ++中是非常容易的,但是我发现这个可以在C:

 #include <stdio.h> #include <windows.h> // WinApi header int main() { HANDLE hConsole; int k; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // you can loop k higher to see more color choices for(k = 1; k < 255; k++) { SetConsoleTextAttribute(hConsole, k); printf("%3d %s\n", k, "I want to be nice today!"); } getchar(); // wait return 0; } 

所有的意见将帮助你找到你的方式通过代码 – 希望它可以帮助!

如果要在Windows控制台中打印彩色文本,则必须使用Windows API。 Windows中不再存在ANSI.sys支持。

在Linux中,您仍然可以使用ANSI转义序列来为文本添加颜色。

如果您仅限于使用printf() ,则需要知道要写入的终端。 有可能是一个ANSI风格的终端,所以可以这样做。 Unix curses (Linux ncurses )库以独立于终端的方式处理这些信息。 基本上,您将需要定义或制造控制字符串以将终端设置为red模式,然后重新将其重新设置(但在将其更改为写入红色文本之前,您怎么知道它处于什么状态?)。 提到的图书馆跟踪状态信息,以及许多其他细节。

但是,如果你得到的字符串组织,那么像这样的代码将(或多或少)的技巧:

 static const char to_red[] = "\033..."; static const char to_black[] = "\033..."; printf("%s%s%s\n", to_red, "hello world", to_black); 

最难的部分是确定常量字符串中的内容(实际上不需要保持不变)。

所有这些都意味着可能有一个Windows特定的接口可以用来完成这个工作,但是这并不涉及printf()来控制颜色。 您调用Windows API来设置颜色,然后使用printf()编写,然后再次调用API以恢复颜色。 有可能是一个查询功能,让你找到当前的设置,你使用之前改变它。

Java中的控制台使用stdout,无论您在哪个操作系统上运行。 对于Windows,您需要访问控制台API来更改颜色。 对于Linux或Mac,控制台可能支持可以通过stdout更改控制台颜色的ANSI转义序列 。