C++笔记之cout高亮输出以及纯C++实现一个彩色时钟
code review!
 
文章目录
- C++笔记之cout高亮输出以及纯C++实现一个彩色时钟
- 一.cout高亮输出
- 1.1.运行
- 1.2.代码一
- 1.3.代码二
- 1.4.重置终端的文本格式到默认设置说明
 
- 二.纯C++实现一个彩色时钟
- 2.1.运行
- 2.2.main.cc
- 2.3.cout带颜色打印输出技巧.
 
 
一.cout高亮输出
1.1.运行

1.2.代码一

代码
#include <iostream>// 定义ANSI转义序列来设置文本样式和背景
constexpr const char* HIGHLIGHT_STYLE = "\033[4;34;43m"; // 蓝色下划线文本和黄色背景
constexpr const char* RESET_STYLE = "\033[0m";           // 重置文本样式到默认int main() {// 使用定义好的ANSI转义序列来高亮打印测试信息std::cout << HIGHLIGHT_STYLE << "----------高亮打印测试------" << RESET_STYLE << std::endl;return 0;
}
1.3.代码二

代码
#include <iostream>int main() {// 使用定义好的ANSI转义序列来高亮打印测试信息std::cout << "\e[4;34;43m"<< "----------高亮打印测试------"<< "\e[0m" << std::endl;return 0;
}
1.4.重置终端的文本格式到默认设置说明
在这两段代码中:
<< "\e[0m" << std::endl;
和
<< "\033[0m" << std::endl;
唯一的区别是用于表示ANSI转义序列中的ESC(Escape)字符的表示方法不同。
- "\e"是一种在一些编译器和环境中支持的转义序列,用于表示ESC字符,其ASCII码值为27。
- "\033"使用八进制表示法表示同一个ESC字符(因为33是27的八进制表示)。
在功能上,两者完全相同,都用于重置终端的文本格式到默认设置。这意味着在打印了带有特定颜色和格式的文本之后,这些序列将终端格式重置,以防随后的输出也被同样的格式影响。
然而,不是所有的编译器都识别"\e"这种表示方式。例如,GCC和Clang通常支持它,但是根据C和C++的标准,这不是一个标准的转义序列。相比之下,"\033"是一个更加可移植和标准的方式来编写ESC,因为它是基于ASCII码值的八进制转义序列,所有符合标准的C和C++编译器都会支持它。
在编写依赖于特定终端特性的代码(如ANSI转义序列)时,通常推荐使用更加可移植的表示方法。因此,如果你不确定编译器是否支持"\e",使用"\033"是一个更安全的选择。
二.纯C++实现一个彩色时钟
文章主要内容抄自:《鲨鱼编程》公众号文章:C++控制台彩色时钟的实现.
2.1.运行

2.2.main.cc

代码
#include <iostream>  
#include <iomanip>  
#include <chrono>  
#include <thread>  // 定义ANSI转义序列来控制文本颜色  
const char* HOUR_COLOR = "\033[31m";  // 红色小时  
const char* MINUTE_COLOR = "\033[32m"; // 绿色分钟  
const char* SECOND_COLOR = "\033[33m"; // 黄色秒  
const char* RESET_COLOR = "\033[0m";   // 重置颜色  void print_colored_time() {  // 获取当前时间  auto now = std::chrono::system_clock::now();  auto now_time_t = std::chrono::system_clock::to_time_t(now);  std::tm* now_tm = std::localtime(&now_time_t);  // 输出彩色时钟  std::cout << HOUR_COLOR << std::setw(2) << std::setfill('0') << now_tm->tm_hour << ":"  << MINUTE_COLOR << std::setw(2) << std::setfill('0') << now_tm->tm_min << ":"  << SECOND_COLOR << std::setw(2) << std::setfill('0') << now_tm->tm_sec  << RESET_COLOR << std::endl;  
}  int main() {  while (true) {  print_colored_time();  std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待1秒  // 清空控制台,以便下次输出  // 注意:这种清空控制台的方法在Windows和Linux/macOS上可能不同  // 下面的代码适用于Windows系统  // system("CLS");  // 对于Linux/macOS系统,可以使用  // system("clear");  }  return 0;  
}
2.3.cout带颜色打印输出技巧.

