printf输出字体颜色

本博客展示了如何在终端输出中实现字体颜色变化和闪烁效果,通过使用ANSI控制码实现动态输出,示例代码输出十次带有颜色和闪烁的'Hello World'。

printf输出字体颜色 收藏
有时候为了实现在终端输出的时候字体能够带颜色,并且可以产生简单的闪烁的功能,特写了下列的代码
实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.
(注:具体还得判断终端类型)


CODE:

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>

int flag = 0;

void sig_int(int signum)
{
        if (flag == 1)
                fprintf(stderr, "/033[47;31mhello world/033[5m");
        fprintf(stderr,"/033[;/033[0m");
        fprintf(stderr,"/033[;/033[0m");
        printf("/n");
        exit(0);
}

int main()
{
        int i = 0;
        struct sigaction sig_act;
        sig_act.sa_handler = sig_int;
        sigemptyset(&sig_act.sa_mask);
        sig_act.sa_flags = 0;
        if (sigaction(SIGINT, &sig_act, NULL) < 0)
        {
                fprintf(stderr, "signal error/n");
                exit(1);
        }
        while (i++ < 10)
        {
                fprintf(stderr, "/033[;/033[s");
                fprintf(stderr, "/033[47;31mhello world/033[5m");
                flag = 0;
                sleep(1);
                fprintf(stderr, "/033[;/033[u");
                fprintf(stderr, "/033[;/033[K");
                flag = 1;
                sleep(1);
        }

        fprintf(stderr, "/033[47;31mhello world/033[5m");
        fprintf(stderr,"/033[;/033[0m");
        printf("/n");
        return 0;
}


该程序实现输出十次hello world然后退出. 使用一个信号是为了还原默认的终端输出的颜色.
另外再讲讲如何输出颜色以及颜色的代码.

格式:

 

CODE:

printf("/033[字背景颜色;字体颜色m字符串/033[0m" ); 

printf("/033[47;31mhello world/033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串.  后面的/033[5m是控制码.


颜色代码:

 

QUOTE:

字背景颜色范围: 40--49                   字颜色: 30--39
                40: 黑                           30: 黑
                41: 红                           31: 红
                42: 绿                           32: 绿
                43: 黄                           33: 黄
                44: 蓝                           34: 蓝
                45: 紫                           35: 紫
                46: 深绿                         36: 深绿
                47: 白色                         37: 白色


ANSI控制码:

 

QUOTE:

  /033[0m   关闭所有属性  
  /033[1m   设置高亮度  
  /03[4m   下划线  
  /033[5m   闪烁  
  /033[7m   反显  
  /033[8m   消隐  
  /033[30m   --   /033[37m   设置前景色  
  /033[40m   --   /033[47m   设置背景色  
  /033[nA   光标上移n行  
  /03[nB   光标下移n行  
  /033[nC   光标右移n行  
  /033[nD   光标左移n行  
  /033[y;xH设置光标位置  
  /033[2J   清屏  
  /033[K   清除从光标到行尾的内容  
  /033[s   保存光标位置  
  /033[u   恢复光标位置  
  /033[?25l   隐藏光标  
  /33[?25h   显示光标


这样, 在某些时候就可以实现动态的输出.


原址: http://blog.sina.com.cn/s/blog_4c12aff701008284.html


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/andydung/archive/2010/04/08/5464110.aspx

<think>好的,用户现在想知道如何在C语言中使用printf来改变输出颜色。之前他们已经提供了几个引用资料,我需要综合这些信息来给出一个清晰的回答。首先,我需要确认用户的使用环境,因为不同的系统可能有不同的实现方式。根据引用[1][3],用户可能是在Linux环境下,而引用[3][5]提到了Windows的控制台操作,所以应该分别说明两种系统下的方法。 接下来,需要解释ANSI转义码的基本用法,包括格式颜色代码。引用[1][4]都提到了使用\033或者\x1B来开始转义序列,然后设置显示方式、前景色背景色。要详细列出常用的颜色代码,比如31是色前景,32是绿色等。同时要提醒用户注意,在Windows下默认可能不支持ANSI,需要启用虚拟终端支持,或者使用Windows API,如引用[3]中的SetConsoleTextAttribute函数。 然后,需要给出示例代码,展示如何在LinuxWindows下分别实现颜色输出。例如,Linux下直接使用printf带转义码,而Windows下可能需要包含windows.h并使用SetConsoleTextAttribute。同时,要提到跨平台处理的宏定义方法,如引用[2]中的做法,定义颜色宏来简化代码。 还要注意用户可能遇到的常见问题,比如颜色未重置导致后续输出也带有颜色,或者Windows下的兼容性问题。引用[5]提到的乱码问题可能编码有关,但当前问题主要关注颜色,所以暂时不提,除非用户后续提问。 最后,需要生成相关问题,帮助用户深入理解,比如跨平台方法、颜色未生效的原因、背景色设置以及恢复默认颜色的方法。这些问题可以引导用户进一步探索相关主题。</think>在C语言中修改`printf`输出颜色主要依赖ANSI转义序列(Linux/Mac)或Windows API控制台属性。以下是具体实现方法: ### 一、ANSI转义码方法(Linux/macOS/Windows终端支持) 格式:`\033[显示方式;前景色;背景色m` ```c #include <stdio.h> int main() { // 色文字,默认背景 printf("\033[31m这是色文本\033[0m\n"); // 绿色背景,黄色文字,加粗 printf("\033[1;33;42m警告信息\033[0m\n"); // 闪烁的蓝色文字 printf("\033[5;34m紧急通知\033[0m\n"); return 0; } ``` #### 颜色代码表(部分) | 类型 | 代码范围 | 示例代码 | |------------|----------|-------------| | 重置 | 0 | \033[0m | | 文字颜色 | 30-37 | 31= | | 背景颜色 | 40-47 | 42=绿背景 | | 显示方式 | 1-8 | 1=加粗,5=闪烁 | ### 二、Windows API方法(需包含<windows.h>) ```c #include <stdio.h> #include <windows.h> int main() { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // 色文字 SetConsoleTextAttribute(hConsole, FOREGROUND_RED); printf("错误信息\n"); // 黄色背景+蓝色文字 SetConsoleTextAttribute(hConsole, BACKGROUND_RED | BACKGROUND_GREEN | FOREGROUND_BLUE); printf("特殊提示\n"); // 恢复默认 SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); return 0; } ``` ### 三、跨平台兼容方案 ```c #ifdef _WIN32 #include <windows.h> #define SET_COLOR(color) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color) #define RED_COLOR FOREGROUND_RED #else #define SET_COLOR(color) printf("\033[%dm", color) #define RED_COLOR 31 #endif int main() { SET_COLOR(RED_COLOR); printf("跨平台色文本"); // 重置颜色 #ifdef _WIN32 SET_COLOR(7); // Windows默认灰色 #else printf("\033[0m"); #endif return 0; } ``` 注意事项: 1. ANSI方法需终端支持(Windows需开启"启用虚拟终端")[^1][^4] 2. 颜色代码必须以`\033[0m`重置,否则后续输出会继承颜色[^2] 3. Windows控制台默认有16种颜色组合,ANSI支持256色模式[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值