c语言怎么输出有颜色的字,求大神,看别人代码,是输出黄的,求告诉其他的…

如题所述

#include <stdio.h>
#include <conio.h> /* 使用getch()函数,这个函数用于无缓冲输入,不回显。即:按下一个键立即读入该字符(不需要按回车键),并且不自动把读入的字符显示在屏幕上 */

/* 打印指定宽度的颜色条 */
/* 参数1:颜色 */
/* 参数2:宽度 */
void prt_color_bar(unsigned color, unsigned width)
{
unsigned i;
/* 指定宽度个数的空格 */
for (i = 0; i < width; i++)
{
printf("\033[%u;%um \033[0m", color, color-10);
/* 同颜色,文字色的数值比背景色的代码少10 */
}
}追答

/* 打印菜单文字 */
/* 参数1:文字行号,将该行文字背景色设为白色,文字颜色设为黑色 */
/* 参数2:为了实现文字居中,指定文字之前空出的宽度 */
void prt_txt(unsigned line_num, unsigned width)
{
/* 默认每行颜色:黑底白字 */
/* 第一行 */
unsigned bg1 = 40, fg1 = 37;
/* 第二行 */
unsigned bg2 = 40, fg2 = 37;
/* 第三行 */
unsigned bg3 = 40, fg3 = 37;

/* 根据参数调整指定的行颜色为白底绿字 */
switch (line_num)
{
case 1:
bg1 = 47;
fg1 = 32;
break;
case 2:
bg2 = 47;
fg2 = 32;
break;
default:
bg3 = 47;
fg3 = 32;
break;
}

/* 空行 */
putchar('\n');
/* 在文字之前打印指定宽度的黑色颜色条,实现文字居中 */
prt_color_bar(40, width);

/* 根据上面最终各行的颜色打印文字 */
printf("\033[%u;%um%s\033[0m\n\n", bg1, fg1, " 双人游戏 ");

prt_color_bar(40, width);
printf("\033[%u;%um%s\033[0m\n\n", bg2, fg2, " 单人游戏 ");

prt_color_bar(40, width);
printf("\033[%u;%um%s\033[0m\n\n", bg3, fg3, " 退出游戏 ");

putchar('\n');
}

int main(void)
{
/* 颜色条宽度,即占据多少个英文字符宽度 */
/* 一个汉字占两个英文字符宽度 */
/* 根据你的终端自行修改数值 */
unsigned width = 36;
/* 要实现文字居中,在文字之前也打印一定宽度的黑色色条 */
/* 8表示4个汉字占据的英文字符宽度 */
unsigned w = (width - 10) / 2;
/* 当前行数 */
unsigned current = 1;
/* 用户输入 */
char ch = 0;

/* 以无缓冲方式读入用户输入的字符,即按下的键 */
do
{
/* 打印新菜单之前,清屏 */
clrscr();

/* 打印开头颜色条 */
prt_color_bar(43, width);
putchar('\n');
prt_color_bar(47, width);
putchar('\n');

/* 如果用户输入2或4,将行数减1 */
/* 如果用户输入6或8,将行数加1 */
/* 由于只有三行文字,所以行数下限为1,上限为3 */
switch (ch)
{
default: break;
case '2':
case '4':
if (current > 1)
current--;
break;
case '6':
case '8':
if (current < 3)
current++;
break;
}

/* 打印菜单文字 */
prt_txt(current, w);

/* 打印结尾颜色条 */
prt_color_bar(47, width);
putchar('\n');
prt_color_bar(43, width);
}while(ch = getch());
/* 使用do-while循环,让程序在运行时就自动打印一次菜单 */

return 0;
}

三个函数,如果不是三个,那就是被管理员删了。
全部复制到一个文件里,main函数放在另外两个函数后面。

追问

我想知道为什么管理会散

给你磕3个头,谢谢,回去好好研究

追答

可能是那些看不懂代码的管理,发现回答里面数字多了就删。

运行了吗

追问

话说你在这回答,是想让我采纳你吗?😃😃😁

追答

看错了,答完发现你把那个问题问了三次

追问

呵呵

可以运行

谢谢

你给的看不懂!😭😭😭

追答

哪里不懂

追问

你用拼音不行啊

非用英语当函数名

还有主函数放前面,

你能给我推荐书吗

或者网站

资源也行

你是怎么学成这样的阿!!!

我想得到一个正方形的墙怎么是这样?

追答

你学到变长数组了?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-24
这种方式 仅限于Linux使用
你用的手机是安卓的,同样是Linux内核 也可以用
到windows上是用不了的。
格式为
\033[字背景颜色;字体颜色m字符串\033[0m
echo "\033[41;36m something here \033[0m"

其中41的位置代表底色, 36的位置是代表字的颜色

字背景颜色范围:40----49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色

字颜色:30-----------39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色

===============================================ANSI控制码的说明
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
第2个回答  2017-03-24
这个在windows下是用不了的,但是windows有另外的API去操作。
Linux等系统下可以使用ANSI Escape Code操作stdout输出的位置颜色等,具体可以参见wiki
https://en.wikipedia.org/wiki/ANSI_escape_code
第3个回答  2017-03-24
去买啊。彩色字体。