#include
#include
// 数字的星号表示形式
const char *digits[10][5] = {
{"*****", "* *", "* *", "* *", "*****"}, // 0
{" *", " *", " *", " *", " *"}, // 1
{"*****", " *", "*****", "* ", "*****"}, // 2
{"*****", " *", "*****", " *", "*****"}, // 3
{"* *", "* *", "*****", " *", " *"}, // 4
{"*****", "* ", "*****", " *", "*****"}, // 5
{"*****", "* ", "*****", "* *", "*****"}, // 6
{"*****", " *", " *", " *", " *"}, // 7
{"*****", "* *", "*****", "* *", "*****"}, // 8
{"*****", "* *", "*****", " *", " *"} // 9
};
// 显示时间的函数
void displayTime(int hour, int minute, int second) {
int i, j;
// 显示小时的十位和个位
for (i = 0; i < 5; i++) {
printf("%s %s\n", digits[hour / 10][i], digits[hour % 10][i]);
}
printf("\n");
// 显示冒号
printf(" * \n\n");
// 显示分钟的十位和个位
for (i = 0; i < 5; i++) {
printf("%s %s\n", digits[minute / 10][i], digits[minute % 10][i]);
}
printf("\n");
// 显示冒号
printf(" * \n\n");
// 显示秒钟的十位和个位
for (i = 0; i < 5; i++) {
printf("%s %s\n", digits[second / 10][i], digits[second % 10][i]);
}
printf("\n");
}
int main() {
time_t rawtime;
struct tm *timeinfo;
while (1) {
// 获取当前时间
time(&rawtime);
timeinfo = localtime(&rawtime);
// 显示当前时间
printf("\033[H\033[J"); // 清屏
displayTime(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
// 休眠1秒
sleep(1);
}
return 0;
}
当你运行这个程序时,它会创建一个无限循环,不断地获取当前的系统时间,并将其以星号的形式显示在终端上。下面是程序的主要部分:
头文件包含:
#include
#include
这里包含了两个头文件,stdio.h
包含了输入输出函数的声明,而 time.h
包含了时间相关函数的声明。
星号数字数组:
const char *digits[10][5] = {
// 星号表示的数字形式,每个数字用 5 行的星号表示
};
这个数组存储了每个数字(0 到 9)的星号表示形式。每个数字被表示成一个 5x5 的星号图案。
显示时间的函数:
void displayTime(int hour, int minute, int second) {
// 显示小时、分钟和秒数的星号表示形式
}
这个函数将给定的小时、分钟和秒数以星号的形式打印在终端上,每个数字占据 5 行。
主函数:
int main() {
// 获取当前时间
// 显示当前时间
// 每秒更新一次
return 0;
}
main
函数通过调用 time()
函数获取当前时间的时间戳,并使用 localtime()
函数将时间戳转换为本地时间结构体。displayTime
函数,将当前的小时、分钟和秒数传递给它,以在终端上显示当前时间。sleep(1)
函数暂停程序的执行一秒钟,然后继续下一个循环,以便每秒更新一次显示的时间。清屏代码:
printf("\033[H\033[J"); // 清屏
这是一个 ANSI 转义序列,它用于清除终端的屏幕内容。\033[H
将光标移动到终端的左上角,\033[J
清除从光标位置到屏幕末尾的内容。
这个程序的核心思想是不断获取当前时间并将其以星号的形式显示在终端上,从而实现一个简单的时钟效果。