c ansi complete

This commit is contained in:
rangersly 2025-05-16 20:41:41 +08:00
parent e558ee3788
commit b2b03b8589

View File

@ -3,6 +3,12 @@
## 在代码中检测是否支持ANSI C
`#if __STDC__ == 1`
## index
- [文本样式控制](#文本样式控制)
- [color](#color)
- [光标控制](#光标控制)
- [example](#example)
- [进度条](#进度条)
---
## **文本样式控制**
@ -20,7 +26,9 @@
---
## **前景色**
## **color**
- **前景色**
| 转义码 | 颜色 | 转义码(亮色) |
|---------------|-----------|----------------|
| `\033[30m` | 黑色 | `\033[90m` |
@ -32,9 +40,7 @@
| `\033[36m` | 青色 | `\033[96m` |
| `\033[37m` | 白色 | `\033[97m` |
---
## **背景色**
- **背景色**
| 转义码 | 颜色 | 转义码(亮色) |
|---------------|-----------|----------------|
| `\033[40m` | 黑色 | `\033[100m` |
@ -46,18 +52,12 @@
| `\033[46m` | 青色 | `\033[106m` |
| `\033[47m` | 白色 | `\033[107m` |
---
## **RGB 颜色**
- **RGB 颜色**
如果终端支持 **24-bit 真彩色**,可以使用:
```c
printf("\033[38;2;<r>;<g>;<b>m"); // 设置前景色RGB
printf("\033[48;2;<r>;<g>;<b>m"); // 设置背景色RGB
```
**示例:**
```c
printf("\033[38;2;255;100;0m这是橙红色文字\033[0m\n");
```
---
@ -78,50 +78,37 @@ printf("\033[38;2;255;100;0m这是橙红色文字\033[0m\n");
| `\033[s` | 保存光标位置 |
| `\033[u` | 恢复光标位置 |
---
## **example**
```
### **进度条**
```c
#include <stdio.h>
#include <unistd.h> // 用于 sleep 函数
#if __STDC__ != 1
#error "NO ansi !"
#endif
// 生成 RGB 前景色 ANSI 代码(需确保缓冲区足够大)
#define GET_RGB(buf,size,r,g,b) do{snprintf(buf, (size), "\033[38;2;%d;%d;%dm", (r), (g), (b));}while(0)
int main(void) {
printf("-----TEXT STYLE-----\n");
printf("\033[0m\\033[0m\033[0m\n");
printf("\033[1m\\033[1m\033[0m\n");
printf("\033[2m\\033[2m\033[0m\n");
printf("\033[3m\\033[3m\033[0m\n");
printf("\033[4m\\033[4m\033[0m\n");
printf("\033[5m\\033[5m\033[0m\n");
printf("\033[6m\\033[6m\033[0m\n");
printf("\033[7m\\033[7m\033[0m\n");
printf("\033[8m\\033[8m\033[0m\n");
printf("\033[9m\\033[9m\033[0m\n");
void update_progress(int percent) {
char color[32];
// 根据进度改变颜色(红色 -> 黄色 -> 绿色)
GET_RGB(color, sizeof(color), 255 * (100 - percent) / 100, 255 * percent / 100, 0);
// 绘制进度条
printf("\r%s[", color);
for (int i = 0; i < 50; i++)
printf(i < percent / 2 ? "" : " ");
printf("] %d%%\033[0m", percent);
fflush(stdout); // 强制刷新输出
}
printf("\n-----COLOR-----\n");
printf("\033[30m\\033[30m\033[0m - \033[90m\\033[90m\033[0m\n");
printf("\033[31m\\033[31m\033[0m - \033[91m\\033[91m\033[0m\n");
printf("\033[32m\\033[32m\033[0m - \033[92m\\033[92m\033[0m\n");
printf("\033[33m\\033[33m\033[0m - \033[93m\\033[93m\033[0m\n");
printf("\033[34m\\033[34m\033[0m - \033[94m\\033[94m\033[0m\n");
printf("\033[35m\\033[35m\033[0m - \033[95m\\033[95m\033[0m\n");
printf("\033[36m\\033[36m\033[0m - \033[96m\\033[96m\033[0m\n");
printf("\033[37m\\033[37m\033[0m - \033[97m\\033[97m\033[0m\n");
printf("\033[38;2;112;223;234m\\033[38;2;112;223;234m\033[0m\n");
printf("\033[40m\\033[40m\033[0m - \033[100m\\033[100m\033[0m\n");
printf("\033[41m\\033[41m\033[0m - \033[101m\\033[101m\033[0m\n");
printf("\033[42m\\033[42m\033[0m - \033[102m\\033[102m\033[0m\n");
printf("\033[43m\\033[43m\033[0m - \033[103m\\033[103m\033[0m\n");
printf("\033[44m\\033[44m\033[0m - \033[104m\\033[104m\033[0m\n");
printf("\033[45m\\033[45m\033[0m - \033[105m\\033[105m\033[0m\n");
printf("\033[46m\\033[46m\033[0m - \033[106m\\033[106m\033[0m\n");
printf("\033[47m\\033[47m\033[0m - \033[107m\\033[107m\033[0m\n");
printf("\033[48;2;112;223;234m\\033[48;2;112;223;234m\033[0m\n");
printf("\033[0m\n");
int main() {
for (int i = 0; i <= 100; i++) {
update_progress(i);
usleep(50000);
}
putchar('\n');
return 0;
}
```