【C++标准库】std::cout 输出流

 

 

1.颜色显示

 

终端显示字体背景和字体颜色等使用用法
  可输入以下指令查看其使用方法

man console_codes
1
  在命令行下能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如:
  printf(“\033[0;30;41m color!!! \033[0m Hello \n”);
  其中41的位置代表字的背景色, 30的位置是代表字的颜色,0 是字的一些特殊属性,0代表默认关闭,一些其他属性如闪烁、下划线等。ascii code 是对颜色进行调用的。
\033[ ; m …… \033[0m
  颜色的控制通过ESC字符(\033)加”[“加颜色代码加”m”实现。ESC的ASCII码是十进制的27,八进制的033(\033)。

  在 ANSI 兼容终端里,可以用彩色显示文本而不仅仅是黑白。但是我们自己编写的程序能否输出彩色的字符呢?当然答案是肯定的。下面的语句就输出高亮的黑色背景的绿色字。
  printf(“\033[1;40;32m color!!! \033[0m hello\n”);
  \033 声明了转义序列的开始,然后是 [ 开始定义颜色。后面的 1 定义了高亮显示字符。然后是背景颜色,这里面是40,表示黑色背景。接着是前景颜色,这里面是32,表示绿色。我们用 \033[0m 关闭转义序列, \033[0m 是终端默认颜色。通过上面的介绍,就知道了如何输出彩色字符了。

字色 背景 颜色
---------------------------------------
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色

代码 意义
————————-
0 终端默认设置(黑底白字)
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见

printf("\033[1;33m Hello World. \033[0m \n");
颜色列表如下:
none = "\033[0m"
black = "\033[0;30m"
dark_gray = "\033[1;30m"
blue = "\033[0;34m"
light_blue = "\033[1;34m"
green = "\033[0;32m"
light_green -= "\033[1;32m"
cyan = "\033[0;36m"
light_cyan = "\033[1;36m"
red = "\033[0;31m"
light_red = "\033[1;31m"
purple = "\033[0;35m"
light_purple = "\033[1;35m"
brown = "\033[0;33m"
yellow = "\033[1;33m"
light_gray = "\033[0;37m"
white = "\033[1;37m"

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

 

输出特效格式控制:

\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 显示光标

终端显示字体背景和字体颜色代码测试
#include<stdio.h>
#include<unistd.h>

int main (int argc ,char *argv[])
{

while(1)
{
printf("************************* \n");
printf("\033[0;30;41m color!!! \033[0m Hello \n");
printf("\033[1;30;41m color!!! \033[0m Hello \n");
printf("\033[4;30;41m color!!! \033[0m Hello \n");
printf("\033[5;30;41m color!!! \033[0m Hello \n");
printf("\033[7;30;41m color!!! \033[0m Hello \n");
printf("\033[8;30;41m color!!! \033[0m Hello \n");

printf("************************* \n");
printf("\033[0;30;41m color!!! \033[0m Hello \n");
printf("\033[0;31;41m color!!! \033[0m Hello \n");
printf("\033[0;32;41m color!!! \033[0m Hello \n");
printf("\033[0;33;41m color!!! \033[0m Hello \n");
printf("\033[0;34;41m color!!! \033[0m Hello \n");
printf("\033[0;35;41m color!!! \033[0m Hello \n");
printf("\033[0;36;41m color!!! \033[0m Hello \n");
printf("\033[0;37;41m color!!! \033[0m Hello \n");

printf("************************* \n");
printf("\033[0;30;40m color!!! \033[0m Hello \n");
printf("\033[0;30;41m color!!! \033[0m Hello \n");
printf("\033[0;30;42m color!!! \033[0m Hello \n");
printf("\033[0;30;43m color!!! \033[0m Hello \n");
printf("\033[0;30;44m color!!! \033[0m Hello \n");
printf("\033[0;30;45m color!!! \033[0m Hello \n");
printf("\033[0;30;46m color!!! \033[0m Hello \n");
printf("\033[0;30;47m color!!! \033[0m Hello \n");

sleep(100);
}
return 0;

}

输出界面如下:

注意,字体背景和字的颜色一样时,会看不见字了。
————————————————
版权声明:本文为CSDN博主「夜风~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014470361/article/details/81512330

2.覆盖显示

int n;                                                      // n为往前想要覆盖的行数
std::cout << "\033[nA" << std::endl;       // 将光标定位到 n 行前的开头处

// 用空行清除(覆盖)掉原本的内容
for (int i = 0; i < n; i++) {
    std::cout << "                                                      " << std::endl;
}

std::cout << "\033[nA" << std::endl;       // 重新将光标定位到 n 行前的开头处

// 打印新的内容
for (int i = 0; i < n; i++) {
    std::cout << "NEW PRINT" << std::endl;
}

  

3.

 

原文链接: https://www.cnblogs.com/SchrodingerDoggy/p/14072823.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    【C++标准库】std::cout 输出流

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/205654

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午10:18
下一篇 2023年2月12日 下午10:18

相关推荐