标题:学着别人写万年历,可总不成功,帮忙看看原因
只看楼主
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
结帖率:100%
已结贴  问题点数:20 回复次数:17 
学着别人写万年历,可总不成功,帮忙看看原因
今天看见个别人发的万年历程序,就研究好久,后来似有所得,便按照原来的思路也想写个万年历,几几经努力总是失败,证明自己还差的太远,可我实在想知道失败的原因,请大家帮看看,帮找找
#include<stdio.h>
#include<stdlib.h>
char month_name[13][9]={"","January","February","March","April","May","June","July","August","September","October","November","December"};
char weekday_name[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
int  month_day[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int month2[6][7];
 
print1(month)
{
  int t,i,j,p=0,m=1;
  printf("===%s===\n",month_name[month]);
  for(t=0;t<=6;t++)
  printf("%7s",weekday_name[t]);
  printf("\n");
  for(i=0;i<6;i++)
  for(j=0;j<7;j++)
  {
    printf("%7d",month2[i][j]);
    p++;
    if(p%7==0)
    printf("\n");
  }
}

leapyear(year)
{
    if(year%4==0&&year%100!=0||year%400==0)
    return(1);
    else
    return(0);
}
calendar(int year)
{
    int month,weekday,x;
    int i,j,t=0,k;
    printf("*****%d*****",year);
    weekday=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;
    if(leapyear(year))
    month_day[2]=29;
    else
    month_day[2]=28;
    for(month=1;month<=12;month++)
    {
        scanf("%d",&x);
        for(i=0;i<6;i++)
        for(j=0;j<=6;j++)
        month2[i][j]=0;

        for(k=1;k<=month_day[month];k++)
        {
           month2[t][weekday]=k;   
           weekday++;
           if(weekday=6)
           {
               weekday=0;
               t++;
           }
         }
        print1(month,k);
    }
}

main()
{
    int year;
    printf("qing shu ru nian fen:\n");
    scanf("%d",&year);
    calendar( year);
    getch();
}
另外小弟在程序中加的scanf("%d",&x);只是为了让程序停顿一下,便于便于排错,没有实际意义。
帮看看,稍稍占用点时间,谢谢。
搜索更多相关主题的帖子: 万年历 原因 include 
2012-10-30 17:59
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 

DO IT YOURSELF !
2012-10-30 18:36
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
我就是看了那个帖子才想写万年历的,可我比对半天也没发现错在哪里,

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-10-30 19:08
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
是编译通不过 还是执行目标差很多

DO IT YOURSELF !
2012-10-30 19:11
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
编译倒是没有报错,显示的样子也对,就是所有的日期都显示0

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-10-30 19:35
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
可能编译器不一致吧

你的代码 我无法编译呢

DO IT YOURSELF !
2012-10-30 19:38
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
谁帮看看啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-10-30 20:01
hepigzhang
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-7-31
得分:20 

兄弟啊你可长点心吧。注释太少看的我那个纠结啊。
我不用TC很多年。
1》   if(leapyear(year))
    month_day[2]=29;
    else
    month_day[2]=28;
这里的下标值用的不对,应该改为month_day【1】...你看一下就懂的
2》print1(month)
{
  int t,i,j,p=0,m=1;
该函数中的m用不到,去掉即可。
3》for(k=1;k<=month_day[month];k++)
这里month_day[month-1],依然是下标有问题。所以用数组的时候千万注意边界问题。
此外,我师傅告诉我说,在实际应用中,尽量不要使用多维数组,会有不稳定因素,但是TC练习的时候可以用。题外话了

两个应该不能犯的错误
1》 if(weekday=6)
           {
               weekday=0;
               t++;
           }
这里的判定条件  初学的时候就说  赋值“=”和   判定“==”区别你需要注意。以后写判定可以把数字写在前面if(6==weekday)  这样如果写错了,编译器会报错,按你的写法编译器不会报错。
2》函数声明和函数调用时候,写的调用有错,print1(month)  {} // 调用print1(month,k);

C是很有意思的,别急躁。慢慢学。祝你学习顺利。
收到的鲜花
  • TonyDeng2012-10-30 23:21 送鲜花  10朵   附言:给个好嘿~
2012-10-30 23:10
hepigzhang
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-7-31
得分:0 
咋没人鼓掌呢~~~~~~~~~
2012-10-30 23:17
hepigzhang
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-7-31
得分:0 
程序可能还有点问题  至少现在能出来点东西了  你再看看吧.....
2012-10-30 23:24



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




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

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