标题:为什么这个万年历的程序不能显示某年某月有的天数
只看楼主
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
结帖率:0
已结贴  问题点数:20 回复次数:10 
为什么这个万年历的程序不能显示某年某月有的天数
这个程序为什么显示不了某年某月有的天数,,选择2不显示,请大家帮忙。。。
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip.h>
struct mon
{
  int maxdata;
  int data;
};
int SeekWeekDay(void);
int WeekDay(int year,int month,int day);
int HowManyDays(void);
int MonthDays(int year,int month);
int PrintWeek(int weekday);
int PrintMonth(int month);
int PrintData(void);
int main()
{
 char choice;
 while(1)
 {
     puts("*******************************");
     puts("*请输入您的选择:            *");
     puts("*输入1求某个日期对应的星期   *");
     puts("*输入2求某年某月有的天数     *");
     puts("*输入3输出某年的日历         *");
     puts("*输入Q结束程序               *");
     puts("*******************************");
     cin>>choice;
     fflush(stdin);
     switch(choice)
     {
         case '1':SeekWeekDay(); break;
         case '2':int HowManyDays(int) ; break;
         case '3':PrintData(); break;
         case 'Q':return 0;
         default: puts("输入错误,请重新输入");break;
     }
    cout<<endl<<endl;
 }
 system("pause");
 return 0;
}
 int HowWanyDays(int)
{
    int year,month,days;
    cout<<"请输入年号和月份:";
    cin>>year>>month;fflush(stdin);
    cout<<"你的输入为"<<year<<"年"<<month<<"月,";
    days=MonthDays(year,month);
    cout<<year<<"年"<<month<<"月有"<<days<<"天\n";
    return 0;
}
 SeekWeekDay()
{
    int year,month,day,weekday;
    cout<<"请输入年 月 日:";
    cin>>year>>month>>day; fflush(stdin);
    cout<<"你的输入为"<<year<<"年"<<month<<"月"<<day<<"日\n";
    weekday=WeekDay(year,month,day);
    cout<<"这天是" ;
    //int PrintWeek(int weekday);
    PrintWeek(weekday);
    return 0;
 }
  PrintWeek(int weekday)
{
    switch(weekday)
    {
    case 0:cout<<"周日";break;
    case 1:cout<<"周一";break;
    case 2:cout<<"周二";break;
    case 3:cout<<"周三";break;
    case 4:cout<<"周四";break;
    case 5:cout<<"周五";break;
    case 6:cout<<"周六";break;
    }
    return 0;
}
 PrintMonth(int month)
{
    switch(month)
    {
            case 1:cout<<"一  月"; break;
            case 2:cout<<"二  月"; break;
            case 3:cout<<"三  月"; break;
            case 4:cout<<"四  月"; break;
            case 5:cout<<"五  月"; break;
            case 6:cout<<"六  月"; break;
            case 7:cout<<"七  月"; break;
            case 8:cout<<"八  月"; break;
            case 9:cout<<"九  月"; break;
            case 10:cout<<"十  月";break;
            case 11:cout<<"十一 月";break;
            case 12:cout<<"十二 月";break;
                }
    return 0;
}
int WeekDay(int year,int month,int day)
{
    int i;
    int run=0,ping=0;
    long sum;
    for(i=1;i<year;i++)
    {
        if(i%4==0 && i%100!=0||i%400==0)
            run++;
        else
            ping++;
    }
    sum=366*run+365*ping;
    for(i=1;i<month;i++)
        sum+=MonthDays(year,i);
    sum+=day;
    return(int)sum&7;
}
int MonthDays(int year,int month)
{
    switch(month)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12: return 31;
    case 4:
    case 6:
    case 9:
    case 11: return 30;
    case 2:
        if(year%4==0 && year&100!=0|| year%400==0)
            return 29;
        else
            return 28;
    default:cout<<"这是一个错误的月份!";system("pause");
        return 0;
    }
}
int PrintData(void)
{
    struct mon month[13];
    int i,j,k;
    int year,mon,week;
    cout<<"请输入年号" ;
cin>>year;
for(i=1;i<13;i++)
{
  month[i].data=1;
  month[i].maxdata=MonthDays(year,i);
 }
for(i=0;i<6;i++)
{
  for(j=1;j<=2;j++)
   {
     mon=2*i+j;
     cout<<setw(20);
     PrintMonth(mon);
     cout<<setw(20);
     if(j==1)
       cout<<'\t';
  }
cout<<endl;cout<<endl;
for(j=1;j<=2;j++)
{
  for(k=0;k<7;k++)
  {
PrintWeek(k);
  }
 cout<<setw(3)<<' ';
}
cout<<endl;
for(j=1;j<=2;j++)
 {
   mon=2*i+j;
 week=WeekDay(year,mon,1);
if( j==1)
 cout<<setw(week*5+5)<<month[mon].data++;
else
 cout<<setw(week*4.8)<<month[mon].data++;
week++;
while(week<7)
{
 cout<<setw(5)<<month[mon].data++;
 week++;
}
if(j==1)
cout<<setw(11)<<' ';
}
cout<<endl;cout<<endl;
while(month[2*i+1].data<=month[2*i+1].maxdata||month[2*i+2].data<=month[2*i+2].maxdata)
{
 for(j=1;j<=2;j++)
  {
mon=2*i+j;
for(k=0;k<7;k++)
{
  if(month[mon].data<=month[mon].maxdata)
    cout<<setw(5)<<month[mon].data++;
    else
     cout<<"    ";
  }
if(j==1)
cout<<'\t';
 }
cout<<endl;cout<<endl;
   }
  cout<<endl;
 }
return 0;
}

  
搜索更多相关主题的帖子: 万年历 万年历 include choice include choice 
2015-10-27 14:14
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:5 
回复 楼主 思闻王
int HowManyDays(int) ;这个case 2不是调用么?怎么写得跟定义似的?其他函数的调用你不是都写得很正常吗?
2015-10-27 14:20
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
得分:0 
回复 2楼 yangfrancis
那应该在加一个case语句?还是把case2去掉
2015-10-27 14:23
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
得分:0 
回复 2楼 yangfrancis
我把 case '2':HowManyDays() ; break;改了就有错误 error C2660: 'HowManyDays' : function does not take 0 parameters
2015-10-27 14:26
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
得分:0 
回复 2楼 yangfrancis
你能帮忙改一下可以吗?我试了几下还是不行。。谢谢
2015-10-27 14:51
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
还是先学习一下函数吧   这就如同在学数学时  连四则混合都搞不明白  要是再此基础上再弄什么幂运算啥的  肯定要慢慢  也不是一定就不行

DO IT YOURSELF !
2015-10-27 14:58
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:5 
前面申明的是int HowManyDays(void);
后面的实现却是
int HowWanyDays(int)

不仅是函数参数类型不相同,而且函数名也写错了。

我们都在路上。。。。。
2015-10-27 15:17
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
得分:0 
回复 7楼 hellovfp
我改过了,还是不行,为什么?
2015-10-27 19:49
思闻王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-9-15
得分:0 
回复 6楼 wp231957
我急着交作业能帮我改一下吗?谢谢了,
2015-10-27 19:50
zj547877350
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2015-10-17
得分:5 
case '2':int HowManyDays(int) ; break;     这句话的int楼主 你是几个意思啊?   去掉就可以了,还有函数楼上的说了函数名出错了
2015-10-27 23:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-458604-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.568622 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved