我写的一个C++万年历,有点毛病,请高手给我修改一下。(100分送上)
万年历的功能还没有实现。实现一个万年历分三栏输出。
大概发现有以下错误。
- C/C++ code
if(n%7==0) break;
这条语句就好像是不起做用似的。
因为找不到原因,所以下面的工作好多还没有做。
如果改的好的。我会送上100分。(请尽量不要修改太多的代码,也就是说整体的尽量不要改,细节问题可以改一下。)
- C/C++ code
#include<iostream.h>#include<iomanip.h>int HowManyDays(int year ,int month);int DayOfWeek(int year );void show();void main(){ int year ; cout<<"请输入年份:"<<endl; cin>>year; static int j1=1; static int j2=1; static int j3=1; int weekday=DayOfWeek(year); for(int i=0;i<4;i++) { show(); while(1) { while(1) { int _month=3*i+1; int Days=HowManyDays(year,_month); for( j1=1;j1<weekday+Days+1;j1++) { int n=0; if(weekday==0) cout<<setw(3)<<j1; else{ if(j1<weekday+1) cout<<setw(3)<<" "; else cout<<setw(3)<<j1-weekday; } n++; if(n%7==0) break; } break; } while(1) { int _month=3*i+2; int Days=HowManyDays(year,_month); for( j2=1;j2<weekday+Days+1;j2++) { int k=0; if(weekday==0) cout<<setw(3)<<j2; else{ if(j2<weekday+1) cout<<setw(3)<<" "; else cout<<setw(3)<<j2-weekday; } k++; if(k%7==0) break; } break; } while(1) { int _month=3*i+3; int Days=HowManyDays(year,_month); for( j3=1;j3<weekday+Days+1;j3++) { int m=0; if(weekday==0) cout<<setw(3)<<j3; else{ if(j3<weekday+1) cout<<setw(3)<<" "; else cout<<setw(3)<<j3-weekday; } m++; if(m%7==0) { cout<<endl; break; } } break; } int _month=3*i+3; int Days=HowManyDays(year,_month); if(j3>=weekday+Days+1) break; } }}int HowManyDays(int year ,int month) //计算一个月有多少天{ int days; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return days=31; else if(month==2){ if(year%4==0&&year%100!=0||year%400==0) return days=29; else return days=28; } else return days=30;}int DayOfWeek(int year ) //判断星期几{ int i ; int _month[12]; for(i=1;i<=12;i++) _month[i]=HowManyDays(year,i); int weekday=0; weekday=(year-1+(year-1-1)/4)%7; return weekday;}void show(){ for(int j=1;j<=3;j++) { static int month=1; cout<<setw(8)<<" "<<month<<" 月"<<setw(15)<<" "; if(j%3==0) cout<<endl; month++; } for(int k=1;k<=3;k++) { cout<<"-----------------------"<<setw(5)<<" "; if(k%3==0) { cout<<endl; } } for(int l=1;l<=3;l++) { cout<<setw(1)<<"日 "<<setw(1)<<" 一 "<<setw(1)<<"二 "<<setw(1)<<" 三 "; cout<<setw(1)<<" 四 "<<setw(1)<<" 五 "<<setw(1)<<"六 "; cout<<setw(2)<<" "; if(l%3==0) { cout<<endl; } } for(int m=1;m<=3;m++) { cout<<"-----------------------"<<setw(5)<<" "; if(m%3==0) { cout<<endl; } } }
[解决办法]
你在上面int n = 0;
然后下面 n++;
那每次n必然等于1啊
if(n%7==0)
break;
这个break当然永远进不去。你应该把int n = 0;这句放到循环外面
[解决办法]
显式格式你再调一下
- C/C++ code
#include <iostream.h>
#include <iomanip.h>
int HowManyDays(int year ,int month);
int DayOfWeek(int year );
void show();
void main()
{
int year ;
cout < <"请输入年份:" < <endl;
cin>>year;
static int j1=1;
static int j2=1;
static int j3=1;
int weekday=DayOfWeek(year);
for(int i=0;i <4;i++)
{
show();
int n = 0;
int k = 0;
int m = 0;
while(1)
{
while(1)
{
int _month=3*i+1;
int Days=HowManyDays(year, _month);
for( j1 = n+1;j1 <weekday+Days+1;j1++)
{
if(weekday==0)
cout < <setw(3) < <j1;
else{
if(j1 <weekday+1)
cout < <setw(3) < <" ";
else
cout < <setw(3) < <j1-weekday;
}
n++;
if(n%7 == 0)
break;
}
break;
}
while(1)
{
int _month=3*i+2;
int Days=HowManyDays(year,_month);
for( j2 = k+1;j2 <weekday+Days+1;j2++)
{
if(weekday==0)
cout < <setw(3) < <j2;
else{
if(j2 <weekday+1)
cout < <setw(3) < <" ";
else
cout < <setw(3) < <j2-weekday;
}
k++;
if(k%7==0)
break;
}
break;
}
while(1)
{
int _month=3*i+3;
int Days=HowManyDays(year,_month);
for( j3 = m+1;j3 <weekday+Days+1;j3++)
{
if(weekday==0)
cout < <setw(3) < <j3;
else{
if(j3 <weekday+1)
cout < <setw(3) < <" ";
else
cout < <setw(3) < <j3-weekday;
}
m++;
if(m%7==0)
{
cout < <endl;
break;
}
}
break;
}
int _month=3*i+3;
int Days=HowManyDays(year,_month);
if(j3>=weekday+Days+1)
break;
}
}
}
int HowManyDays(int year ,int month) //计算一个月有多少天
{
int days;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return days=31;
else if(month==2){
if(year%4==0&&year%100!=0||year%400==0)
return days=29;
else return days=28;
}
else
return days=30;
}
int DayOfWeek(int year ) //判断星期几
{
int i ;
int _month[12];
for(i = 0; i < 12; i++)
_month[i]=HowManyDays(year,i);
int weekday=0;
weekday = (year-1+(year-1-1)/4)%7;
return weekday;
}
void show()
{
for(int j=1;j <=3;j++)
{
static int month=1;
cout < <setw(8) < <" " < <month < <" 月" < <setw(15) < <" ";
if(j%3==0)
cout < <endl;
month++;
}
for(int k=1;k <=3;k++)
{
cout < <"-----------------------" < <setw(5) < <" ";
if(k%3==0)
{
cout < <endl;
}
}
for(int l=1;l <=3;l++)
{
cout < <setw(1) < <"日 " < <setw(1) < <" 一 " < <setw(1) < <"二 " < <setw(1) < <" 三 ";
cout < <setw(1) < <" 四 " < <setw(1) < <" 五 " < <setw(1) < <"六 ";
cout < <setw(2) < <" ";
if(l%3==0)
{
cout < <endl;
}
}
for(int m=1;m <=3;m++)
{
cout < <"-----------------------" < <setw(5) < <" ";
if(m%3==0)
{
cout < <endl;
}
}
}
[解决办法]
[解决办法]
mark
[解决办法]
飘过
[解决办法]
另外,尽量使用
#include<iostream>
#include<iomanip>
using namespace std;
