回 帖 发 新 帖 刷新版面

主题:请高手些帮我解决一个C++问题

输出一个万年历   我不知道错哪儿了   帮我改一下吧
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class date
{
public:
     int year;
    int month;
    int day;
}date;
string monthname(int)
{
    switch(date.month)
    {
    case 1:return "Jan";break;
    case 2:return "Feb";break;
    case 3:return "Mar";break;
    case 4:return "Foy";break;
    case 5:return "May";break;
    case 6:return "Jul";break;
    case 7:return "Jun";break;
    case 8:return "Aug";break;
    case 9:return "Sep";break;
    case 10:return "Oct";break;
    case 11:return "Nov";break;
    case 12:return "Dec";break;
    default:return "error";
    }
}
int days(int,int,int)
{
    int i,day_sum;
    int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    day_sum=0;
    for(i=1;i<date.month;i++)
        day_sum+=day_tab[i];
    day_sum+=date.day;
    if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)
        day_sum+=1;
    return(day_sum);
}
void day_act(int,int)
{
    int w[12],i,k,t;
    int day_t[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    t=days(date.year,date.month,date.day);
    for(i=0;i<date.month;i++)
        w[i]=(date.year-1+(date.year-1)/4-(date.year-1)/100+(date.year-1)/400+t)%7;
    cout<<"  "<<monthname(date.month)<<"  "<<date.year<<endl;
        cout<<"Su  Mo  Tu  We  Th  Fr  Sa"<<endl;
        for( i=1;i<=day_t[i];i++)
            cout<<setw(5)<<i;
        for(i=0;i<12;i++)
        {
            if(w[i]==7) w[i]=0;
            cout<<setw(5)<<"  ";
        }
        
        for ( i=1;i<=7-w[i];i++) 
        {
            cout<<"  ";
        }
        cout<<endl;
        int j=i-1;
        for(k=1;k<=7-j;k++)
        {
            cout<<"  ";
            if(k%7==0)cout<<endl;
        }
}
void printcalendar(int)
{
    for(int i=1;i<=12;i++)
    {
        day_act(i,date.year);
        cout<<endl;
    }
}
int main()
{
    cout<<"input year from 1607 to 2007:"<<endl;
    cin>>date.year;
    printcalendar(date.year);
    system("pause");
    return 0;
}

回复列表 (共5个回复)

沙发

date.month

没有初始化,没有赋值。

板凳

还有很多函数的定义(前向声明则可以),只提供一个int参数类型,连名都不给,如果这样,就不用加参数。

3 楼


[em18]
恩?   我知道这一点  可是还是改不对   麻烦你彻底帮我改一下吧
感激不尽阿

4 楼


改一个小地方,可以解决大部分问题:

void printcalendar(int iyear)
{
    date.year = iyear;
    for (int i=1; i<=12; i++)
    {
        date.month = i;
        day_act(i, date.year);
        cout << endl;
    }
}

还有些小错误,自己查查吧。

5 楼

太谢谢你了   似乎对了

我来回复

您尚未登录,请登录后再回复。点此登录或注册