不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

教你输出彩色的文字

任务

学到如何设计一个读入字符串,并且按照字符串信息中规定的颜色,输出相应颜色文本内容的方法程序。
例如当我们:

  • 输入:red:color content, 输出红色的:color content
  • 输入:blue:color content,输出蓝色的:color content
  • 输入:yellow:color content,输出黄色的:color content

编码

输入输出很好设计,关键是如何让字体显示不同的颜色呢

转义字符

1
格式:\033[属性代码{;属性代码...}m输出内容\033[0m
1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("\033[1;4;33mhello color\033[0m"); //输入高亮黄色带下划线的 hello color
return 0;
}
  • 0 代表关闭所有属性
  • 1 代表高亮 / 粗体
  • 4 代表下划线
  • 33 代表黄色

思考题

1,位数输出

1
2
3
4
计算一个输入整数的十进制表示的位数?
条件 1:允许有多余输出的情况下,怎么实现?
条件 2:只允许输出数字位数的时候,又该怎么实现?
请单纯考虑使用 printf 一族函数方法实现。

实现

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {
int n;
scanf("%d", &n);
printf(" has %d digits\n", printf("%d", n)); // 有多余输出
char output[50];
int ret = sprintf(output, "%d", n); //sprintf 也是 printf 一族函数中的一员,它的返回值与 printf 含义相同
printf("%d\n", ret); // 无多余输出
//return 0;
}

2,读入一行字符串

1
2
3
4
请大家自行实现一个读入一行字符串,并且输出相关内容的程序,思考如下:
条件 1:如果字符串中没有空格,怎么实现?
条件 2:如果字符串中有空格,又该怎么实现?
请单纯考虑用 scanf 一族函数方法实现。

实现

1
2
3
4
5
6
7
8
#include <stdio.h>
char str[100];
int main() {
//[]代表了一个集合,用来控制 %s 在读入过程中可以读入的字符集合的
scanf("%[^\n]s", str); //只要不是换行符,就可以继续读入
printf("%s\n", str);
return 0;
}

参考资料

部分颜色代码

1
2
3
4
5
6
7
8
9
字背景颜色: 40--49                字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47:白色 37:白色

小结

此文记录我复习和巩固C语言基础的开端,后面会发布一系列学习笔记,加油!

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!