读书人

这个程序2012会疏失 求解

发布时间: 2013-10-07 19:41:22 作者: rapoo

这个程序2012会出错 求解
#include<iostream>
#include<string>
using namespace std;
int ReturnWeekDay(int iYear,int iMonth)
{
int iWeek = 0;
int y = 0, c = 0, m = 0, d = 1;
if ( iMonth == 1 || iMonth == 2 )
{
c = ( iYear - 1 ) / 100;
y = ( iYear - 1 ) % 100;
m = iMonth + 12;
}
else
{
c = iYear / 100;
y = iYear % 100;
m = iMonth;
}
iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; //蔡勒公式
iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 ); //iWeek为负时取模
if ( iWeek == 0 ) //星期日不作为一周的第一天
{
iWeek = 7;
}
return iWeek;
}//求星期(年,月)
bool IsLeap(int iyear)
{
if(iyear%4==0&&iyear%100!=0||iyear%400==0)
return 1;
else return 0;
}//判断闰年
void Print(int year)
{
int weekday,monthday,i,month,day;
weekday=ReturnWeekDay(year,1);
for(month=1;month<=12;month++)
{
cout<<" "<<month<<"月"<<" "<<year<<endl;
cout<<"日 一 二 三 四 五 六"<<endl;

for(i=0;i<weekday;i=i+1) cout<<" "; // 找当月1日的打印位置
if(month==4 || month== 6 || month==9 || month==11)
monthday = 30;
else if(month==2)
{if(IsLeap(year))
monthday = 29;
else
monthday = 28;
}
else
monthday = 31;
for(day=1;day<=monthday;day=day+1) // 打印当月日期
{if(day>9)
cout<<day<< " ";
else
cout << day << " ";
weekday = weekday+1;
if(weekday==7) // 打满一星期应换行
{weekday = 0;
cout << endl;
}
}
cout <<endl; // 打完一月应换行
}
}
void Print(int year,int month)
{

}
int main()
{
int year;
cin>>year;
Print(year);
system("pause");
return 0;
} c++
[解决办法]
哪里出错?报的错误是什么?
确定下是代码bug还是环境问题
[解决办法]

引用:
Quote: 引用:

哪里出错?报的错误是什么?
确定下是代码bug还是环境问题


结果错误 其他输入会按格式输出
只有2012 格式不对


那你的代码输出不要用cout,用printf函数格式化输出试试!
[解决办法]

/*楼主2012出错并非只是2012,只要是一个月的第一天是周日(元月1号),那么你得到的weekday就是 7 然后你后面先+1 在判断if(weekday==7) 所以后面就都不正确了 ==改为 >= 就是了*/
int ReturnWeekDay(int iYear,int iMonth)
{
int iWeek = 0;
int y = 0, c = 0, m = 0, d = 1;
if ( iMonth == 1
[解决办法]
iMonth == 2 )
{
c = ( iYear - 1 ) / 100;
y = ( iYear - 1 ) % 100;
m = iMonth + 12;
}
else
{
c = iYear / 100;
y = iYear % 100;
m = iMonth;
}
iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; //蔡勒公式
iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 ); //iWeek为负时取模
if ( iWeek == 0 ) //星期日不作为一周的第一天
{
iWeek = 7;
}
return iWeek;
}//求星期(年,月)
bool IsLeap(int iyear)
{
if(iyear%4==0&&iyear%100!=0
[解决办法]


iyear%400==0)
return 1;
else return 0;
}//判断闰年
void Print(int year)
{
int weekday,monthday,i,month,day;
weekday=ReturnWeekDay(year,1);
for(month=1;month<=12;month++)
{
cout<<" "<<month<<"月"<<" "<<year<<endl;
cout<<"日 一 二 三 四 五 六"<<endl;

for(i=0;i<weekday;i=i+1) cout<<" "; // 找当月1日的打印位置
if(month==4
[解决办法]
month== 6
[解决办法]
month==9
[解决办法]
month==11)
monthday = 30;
else if(month==2)
{ if(IsLeap(year))
monthday = 29;
else
monthday = 28;
}
else
monthday = 31;
for(day=1;day<=monthday;day=day+1) // 打印当月日期
{ if(day>9)
cout<<day<< " ";
else
cout << day << " ";
weekday = weekday+1;
if(weekday>=7) // 打满一星期应换行
{ weekday = 0;
cout << endl;
}
}
cout <<endl; // 打完一月应换行
}
}
void Print(int year,int month)
{

}


int _tmain(int argc, _TCHAR* argv[])
{
int year;
cin>>year;
Print(year);


system("pause");
return 0;
}


读书人网 >C++

热点推荐