这是一个打印日历的代码,我下面的代码有一处有一个问题(加粗的那一个部分),我在定义变量的时候,为什么交换了顺序以后就变好了,想请问一下这是为什么? #include <stdio.h>#include <math.h>main(){ int a[11]; //定义每个月数组 int z; //定义判断月初星期几的条件 int year,x=0,y; //定义输入的年份,总天数x,每年天数y int i,j; //定义数组、循环变量 /* int i,j; //定义数组、循环变量 int a[11]; //定义每个月数组 int z; //定义判断月初星期几的条件 int year,x=0,y; //定义输入的年份,总天数x,每年天数y 这里有一个bug,虽然不是太明白,但是交换一下位置,它就变好了。 */ printf("请输入年份\n"); scanf("%d",&year); //获取年份 for(i=1;i<year;i++) //判断瑞年 { if((i%4==0)&&(i%100!=0)||(i%400==0)) y=366; else y=365; x=x+y; } x=x+1; //X表示到本年第一天的总天数 for(i=1;i<=12;i++) { printf("\n\n %d月\n\n",i); printf("日 一 二 三 四 五 六 \n"); if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) //确定每个月份的天数 a[i-1]=31; else if(i==4||i==6||i==9||i==11) a[i-1]=30; else if(year%4==0&&year%100!=0||year%400==0) a[i-1]=29; else a[i-1]=28; z=x%7; //判断第一天是星期几 for(j=0;j<z;j++) //输出空格 printf(" "); for(j=1;j<=a[i-1];j++) //输出日历, { printf("%2d",j); if((z+j)%7==0) //判断换行 printf("\n"); else printf(" "); } x=x+a[i-1]; //加到下一个月 }}
3 回答
已采纳
不偏不易
TA贡献96条经验 获得超118个赞
学一下设置断点并一步一步走下去,
代码行前面灰色部分右键,有个手的图标,那个是设置断点。
F11是运行调试模式,F5是一步步走下去。有时候会出现无法关闭程序的情况,关了VC就行。
先设置在for(j=1;j<=a[i-1];j++) 前面,走一步1个月走到11月,设置在 printf("%2d",j);前面,走一步一天,然后一步步看
我说一下我的查错过程
我看到是在12月31日后,判断条件
for(j=1;j<=a[i-1];j++) //输出日历,
{
printf("%2d",j);
if((z+j)%7==0) //判断换行
printf("\n");
else
printf(" ");
}
此时j=32,a[i-1]==32,所以会继续输出下去,34,35.。。。。。很奇怪,此时a[i-1](a[12-1])应该是31,不变的。
重新走流程走到11月30日,特别关注了一下,走了一步发现a[i-1]=6,i=12,j=6.
至于到底是哪里有问题,你就自己再慢慢查吧。要下班了-。-
另外吐槽一下,感觉赋值每月的天数放在循环外面比较好。
NightRaid
TA贡献1条经验 获得超0个赞
1、 if((i%4==0)&&(i%100!=0)||(i%400==0))
2、else if(year%4==0&&year%100!=0||year%400==0)
看看代码中这2行有问题没(菜鸟路过)
- 3 回答
- 0 关注
- 1653 浏览
添加回答
举报
0/150
提交
取消