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;
}