21xrx.com
2024-11-05 18:49:34 Tuesday
登录
文章检索 我的文章 写文章
C++ 实现输出日历表
2023-07-09 09:15:37 深夜i     --     --
C++ 输出 日历表

C++ 是一门功能强大的编程语言,它可以实现许多复杂的任务,包括输出日历表。输出日历表对于许多人来说非常有用,因为它可以帮助我们快速查看某个月的日期和星期几,以便我们计划我们的工作和生活。

在 C++ 中,我们可以使用循环语句和条件语句来实现输出日历表。下面是一个示例程序,用于输出当前月份的日历表:


#include <iostream>

#include <iomanip>

#include <ctime>

int main() {

 // 获取当前时间

 std::time_t now = std::time(nullptr);

 std::tm *current_time = std::localtime(&now);

 

 // 获取当前月份和当月天数

 int current_month = current_time->tm_mon + 1;

 int days_in_month = ((current_month==2) ? (28 + ((current_time->tm_year%4==0 && current_time->tm_year%100!=0) || current_time->tm_year%400==0)) : 31 - (current_month - 1)%7%2);

 

 // 输出日历表表头

 std::cout << "   " << std::setw(4) << std::left << current_time->tm_year + 1900 << "年" << std::setw(3) << std::right << current_month << "月\n";

 std::cout << " 日 一 二 三 四 五 六\n";

 

 // 循环输出日历表

 for (int i = 1; i <= days_in_month; i++) {

  // 获取当天是星期几

  std::tm t = 0;

  std::mktime(&t);

  int weekday = t.tm_wday;

  

  if (i == 1) {

   // 输出第一天前面的空格

   std::cout << std::string(weekday*3, ' ');

  }

  

  std::cout << std::setw(2) << std::right << i << " ";

  

  if (weekday == 6) {

   // 如果当天是周六,换行

   std::cout << "\n";

  }

 }

 

 // 如果当月最后一天不是周六,补齐空格

 std::tm t = 0;

 std::mktime(&t);

 int last_weekday = t.tm_wday;

 

 if (last_weekday != 6) {

  std::cout << std::string((6 - last_weekday)*3, ' ');

 }

 

 // 输出日历表底部

 std::cout << std::endl;

 

 return 0;

}

这段程序首先通过 `std::time()` 函数获取当前时间,然后使用 `std::localtime()` 函数将其转换为本地时间。接下来,程序通过计算当月的天数和起始星期几,使用循环语句输出日历表。输出时,程序使用了 `std::setw()` 函数设置输出宽度,以及 `std::left` 和 `std::right` 标志设置输出对齐方式。

值得注意的是,这段程序中的计算当月天数和起始星期几的方法只适用于公历日期,对于其他历法可能需要进行相应的修改。

总之,通过这段程序的演示,我们可以看到 C++ 的强大功能和灵活性。希望读者可以在实践中不断探索和应用 C++,实现更多的实用功能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复