C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

2024-01-07 18:25:20

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

code review!

一.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带颜色打印输出技巧.

在这里插入图片描述

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_43297891/article/details/135439863
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。