Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,987 questions

51,931 answers

573 users

How to print the calendar for a specific year in C++

1 Answer

0 votes
#include <iostream>
#include <chrono>
#include <iomanip>
#include <vector>

// C++ 20

using namespace std::chrono; // year // year_month_day // weekday // last

void printYearCalendar(int yr) {
    const std::vector<std::string> months = {"January", "February", "March", "April", "May", "June", 
                                             "July", "August", "September", "October", "November", "December"};
    year y{yr};

    for (unsigned m = 1; m <= 12; m++) {
        std::cout << "\n  ------------ " << months[m-1] << " " << yr << " ------------\n";
        std::cout << "  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n";

        // Get the first day of the month and its weekday index (0=Sun, 6=Sat)
        year_month_day first_day{y / m / 1d};
        weekday wd{sys_days{first_day}};
        int start_pos = wd.c_encoding(); // 0 is Sunday

        // Get the last day of the month to know how many days to print
        auto last_day_val = (y / m / last).day();
        unsigned total_days = (unsigned)last_day_val;

        // Print leading spaces
        for (int i = 0; i < start_pos; i++) std::cout << "     ";

        // Print all days of the month
        for (unsigned d = 1; d <= total_days; d++) {
            std::cout << std::setw(5) << d;
            if ((start_pos + d) % 7 == 0) std::cout << "\n";
        }
        std::cout << "\n";
    }
}

int main() {
    int yr = 2026;
    
    printYearCalendar(yr);
}



/*
run:

  ------------ January 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        1    2    3
    4    5    6    7    8    9   10
   11   12   13   14   15   16   17
   18   19   20   21   22   23   24
   25   26   27   28   29   30   31


  ------------ February 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1    2    3    4    5    6    7
    8    9   10   11   12   13   14
   15   16   17   18   19   20   21
   22   23   24   25   26   27   28


  ------------ March 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1    2    3    4    5    6    7
    8    9   10   11   12   13   14
   15   16   17   18   19   20   21
   22   23   24   25   26   27   28
   29   30   31

  ------------ April 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                   1    2    3    4
    5    6    7    8    9   10   11
   12   13   14   15   16   17   18
   19   20   21   22   23   24   25
   26   27   28   29   30

  ------------ May 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             1    2
    3    4    5    6    7    8    9
   10   11   12   13   14   15   16
   17   18   19   20   21   22   23
   24   25   26   27   28   29   30
   31

  ------------ June 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
         1    2    3    4    5    6
    7    8    9   10   11   12   13
   14   15   16   17   18   19   20
   21   22   23   24   25   26   27
   28   29   30

  ------------ July 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                   1    2    3    4
    5    6    7    8    9   10   11
   12   13   14   15   16   17   18
   19   20   21   22   23   24   25
   26   27   28   29   30   31

  ------------ August 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                                  1
    2    3    4    5    6    7    8
    9   10   11   12   13   14   15
   16   17   18   19   20   21   22
   23   24   25   26   27   28   29
   30   31

  ------------ September 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              1    2    3    4    5
    6    7    8    9   10   11   12
   13   14   15   16   17   18   19
   20   21   22   23   24   25   26
   27   28   29   30

  ------------ October 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        1    2    3
    4    5    6    7    8    9   10
   11   12   13   14   15   16   17
   18   19   20   21   22   23   24
   25   26   27   28   29   30   31


  ------------ November 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1    2    3    4    5    6    7
    8    9   10   11   12   13   14
   15   16   17   18   19   20   21
   22   23   24   25   26   27   28
   29   30

  ------------ December 2026 ------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              1    2    3    4    5
    6    7    8    9   10   11   12
   13   14   15   16   17   18   19
   20   21   22   23   24   25   26
   27   28   29   30   31

*/

 



answered Jan 17 by avibootz
...