C ++日历问题

时间:2013-11-10 00:03:11

标签: c++ calendar syntax-error days

我正在尝试编写一个输出日历的程序。用户必须输入月份开始的日期(星期一 - 0,星期二 - 1等),以及该月份的天数。根据月份的开始日期,日历日期将在特定日期之后开始。我遇到的问题是,我不知道如何让日历在特定日期开始,而且我不确定如何在7天之后将日期转到新行。任何帮助,将不胜感激。到目前为止我们还没有学到很多东西,所以我真的只能使用基础知识,没有功能或类似的东西。

这是我到目前为止所得到的。我可能很远。

#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

int main()
{
    int monthStartDay, daysInMonth;

    cout << "Enter the first day of the month: ";
    cin >> monthStartDay;
    cout << "Enter how many days are in the month: ";
    cin >> daysInMonth;

    cout<<"\nSun   Mon   Tue   Wed   Thu   Fri   Sat";
    cout<<"\n\n"<<setw(2);

    for (int x=1; x <= daysInMonth; x++){
        cout << x << setw(6);

        for (int i=1; i == 6; i++) {
            cout << "\n";
        }
}
    return 0;
}

5 个答案:

答案 0 :(得分:2)

解决方案是使用新索引,该索引将在日历行中显示位置。那就是:

int startDayPostion = (monthStartDay + 1) % 7;

因为你从星期一算起零,但你的印刷品是从星期日开始的。因此需要“向右移”。阅读monthStartDay后添加以上行。

然后你需要添加一个循环,它将打印你需要的所有空格,并将上面提到的位置转移到所需的startDayPostion

int p = 0;
for (; p < startDayPostion; ++p) {
    cout << "" << setw(6);
}

(在for循环x之前插入此内容)

现在,当你有一个班次时,你可以简单地填充其余的单元格,记住你在结束之前(Sat)。

cout << x << setw(6);

继续转移帮助索引:

++p;

然后,如果您已完成该行,请转到新行并重置p:

if (p > 6) {
    cout << '\n';
    p = 0;
}

我不知道为什么你这里放了一个for (int i=1; i == 6; i++)循环...你可以简单地删除那些代码行。

答案 1 :(得分:0)

你检查的内部循环是否i == 6,而且永远不会发生。也许你为什么感到困惑?

这里有两个问题需要解决:如何将新线放在正确的位置,以及如何填充到第一天。

我会为你留下第一个问题。

如果没有给出答案,很难在这样的事情上提供具体的帮助。让我先谈谈。如果我说第一天是第五天,而且有30天,那么你打算打印35件事。前五个是空的空间,其余的是当天的数字。

答案 2 :(得分:0)

我认为,这是你正在寻找的东西:

    #include <iostream>
    #include <iomanip>
    #include <conio.h>

    using namespace std;

    int main()
    {
        int monthStartDay, daysInMonth;

        cout << "Enter the first day of the month: ";
        cin >> monthStartDay;
        cout << "Enter how many days are in the month: ";
        cin >> daysInMonth;

        cout<<"\nSun   Mon   Tue   Wed   Thu   Fri   Sat";
        cout<<"\n\n"<<setw(2);


        int offset = monthStartDay;          // offset for the first date
        for (int i = 0; i < offset; ++i)
            cout << "" << setw(6);             // output blank space

        for (int x=1 ; x <= daysInMonth; x++)
        {
            cout << x << setw(6);        
            if ((x+offset)%7 == 0)         // after each 7th output we have to
                cout << "\n ";             //  make a new line
        }
        return 0;
    }

我还假设,如果您的日历标题是星期日= 0,星期一= 1,...

答案 3 :(得分:0)

这是我掀起的事情 - 希望它有所帮助!

#include "stdafx.h"
#include <iostream>
#include <iomanip>

using namespace std;


int main()
{
    int i, days, startday;

    cout << "Please enter the number of days in the month:" << endl;
    cin >> days;

    cout << "Please enter the starting date of the month (1 = Monday, 7 = Sunday):" << endl;
    cin >> startday;

    for (i = 1; i < startday; i++)
    {
        cout << "   ";
    }

    for (i = 1; i <= days; i++)
    {
        cout << setw(3) << i;

        if ((startday + i - 1) % 7 == 0)
        {
            cout << "\n";
        }
    }

    cout << endl;

    system("pause");

    return 0;
}

如果需要澄清,请告诉我。

答案 4 :(得分:0)

这是我的项目(包括叶年)。您可以为此参考。 规则 1.必须使用En月。 2.必须使用1-> 01〜9-> 09 3.下线时必须使用“ ------------------”。 4.必须将“输入值”用于“输出值”。

        #include <iostream>
    #include <ostream>
    #include <iomanip>

    using namespace std;

    void leafCalendar(int inputYear, int inputMonth);
    bool leafYear(int inputYear);
    int startToYear(int inputYear);
    int startToMonth(int inputYear, int inputMonth);
    int finishToDay[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    char display_year[5];
    char display_month[3];

    int main()
    {
        int inputYear, inputMonth, i;
        char response;
        char dayofWeek[7][5] = { {"Sun"},{"Mon"},{"Tue"},{"Wed"},{"Thu"},{"Fri"},{"Sat"} };
    do
    {
        cout << "enter the year and month. (exam: 2003 5) " << endl;   
        cin >> inputYear >> inputMonth;
        if (leafYear(inputYear))
            finishToDay[1] = 29;
        else finishToDay[1] = 28;
        cout << ("Input Month ");
        cout << (display_year, "$4d", inputYear);
        cout << ("Year");
        cout << (" ");
        cout << (display_month, "$2d", inputMonth);
        cout << ("Month");
        cout << ("is....") << endl;
        cout << ("\t< ");

        cout << (display_month, "$4d", inputYear);
        cout << (" ");
        if (inputMonth == 1) {
            cout << "January";
        };
        if (inputMonth == 2) {
            cout << "February";
        };
        if (inputMonth == 3) {
            cout << "March";
        };
        if (inputMonth == 4) {
            cout << "April";
        };
        if (inputMonth == 5) {
            cout << "May";
        };
        if (inputMonth == 6) {
            cout << "June";
        };
        if (inputMonth == 7) {
            cout << "July";
        };
        if (inputMonth == 8) {
            cout << "August";
        };
        if (inputMonth == 9) {
            cout << "September";
        };
        if (inputMonth == 10) {
            cout << "October";
        };
        if (inputMonth == 11) {
            cout << "November";
        };
        if (inputMonth == 12) {
            cout << "December";
        };
        cout << (" >");

        cout << "\n============================\n";
        if (inputMonth >= 1 && inputMonth <= 12)
        {
            for (i = 0; i < 7; i++)
                cout << " " << dayofWeek[i];
            cout << "\n----------------------------";
        }

        cout << endl;
        leafCalendar(inputYear, inputMonth);        
        cout << ("\n----------------------------\n");
        cout << "\n============================\n" << endl;
        cout << "Repeat?(Y/N): ";
        cin >> response;
    } while (response != 'N' || response != 'n');

    return 0;
}



    void leafCalendar(int inputYear, int inputMonth)
    {
        int StartToDay, LineBreak;

        int TermToLine = (startToYear(inputYear) + startToMonth(inputYear, inputMonth)) % 7;
        LineBreak = TermToLine;
        for (StartToDay = 0; StartToDay < TermToLine; StartToDay++)
            cout << "    ";

        for (StartToDay = 1; StartToDay <= finishToDay[inputMonth - 1]; StartToDay++)
        {   
            std::cout << "  " << std::setw(2) << std::setfill('0') << StartToDay;

            if (LineBreak == 6) {
                cout << "\n----------------------------" <<endl;
                LineBreak = 0;
            }
            else
                LineBreak++;

        }
    }

    bool leafYear(int b)
{
    if ((b % 4 == 0 && !(b % 100 == 0)) || (b % 400 == 0))
        return true;
    else {
        return false;
    }
}

int startToMonth(int inputYear, int inputMonth)
{
    int CheckToLeaf = 0;
    for (int i = 1; i < inputMonth; i++)
        CheckToLeaf += finishToDay[i - 1] % 7;
    if (inputMonth > 2 && leafYear(inputYear))
        CheckToLeaf++;

    return CheckToLeaf % 7;
}



int startToYear(int inputYear)
{
    int CheckToLeaf = 4;

    for (int a = 1980; a >= inputYear; a--)
    {
        CheckToLeaf += 6;
        if (leafYear(a))
            CheckToLeaf += 6;
    }    CheckToLeaf %= 7;

    return CheckToLeaf;
}