C语言——日历显示

在Linux中cal命令显示系统月历与日历。

使用C语言复复刻“cal”命令的显示。

main.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 获取指定日期是星期几
int getWeekday(int year, int month, int day) {
    if (month < 3) {
        month += 12;
        year--;
    }
    int c = year / 100;
    year %= 100;
    int w = (c / 4 - 2 * c + year + year / 4 + 13 * (month + 1) / 5 + day - 1) % 7;
    return (w + 7) % 7;
}

// 显示每个月的一行的日历
int show_month_line(int year, int month, int day) {
    int week = getWeekday(year, month, day);
    int count = 7;
    // 判断闰年
    int isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (isLeapYear) {
        months[1] = 29;
    }
    for (int i = 0; i < week; i++) {
        printf("   ");
        count--;
    }
    for (int i = 0; i < count; i++) {
        if (day <= months[month - 1]) {
            printf("%3d", day);
            day++;
        } else {
            printf("   ");
        }
    }
    return day;
}

// 显示每三个月一组的日历
void show_three_months(int year, int start_month) {
    char *month_names[] = {"January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"};
    for (int i = start_month; i < start_month + 3; i++) {
        printf("%10s %d%7s", month_names[i - 1], year," ");
    }   
    printf("\n");
    for (int i = start_month; i < start_month + 3; i++) {
        printf(" Su Mo Tu We Th Fr Sa ");
    }
    printf("\n");
    int day[3] = {1, 1, 1};
    for (int i = 0; i < 6; i++) {
        for (int j = start_month; j < start_month + 3; j++) {
            day[j - start_month] = show_month_line(year, j, day[j - start_month]);
            printf(" ");
        }
        printf("\n");
    }
    printf("\n");
}

// 显示全年的日历
void show_year(int year) {
    for (int i = 1; i <= 12; i += 3) {
        show_three_months(year, i);
    }
}

int main() {
    system("color 0A");
    show_year(2025);
    return 0;
}

结果对比

在main函数中调用show_year函数,参数为所要查询的月份,即可在终端显示。

对比Linux中的显示,还原度还是可以的。

如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇