C语言编程中的一个bug,求大神指教

这是一个打印日历的代码,

我下面的代码有一处有一个问题(加粗的那一个部分),我在定义变量的时候,为什么交换了顺序以后就变好了,想请问一下这是为什么?

 

#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];    //加到下一个月
 }

凡人0123
浏览 1661回答 3
3回答

不偏不易

学一下设置断点并一步一步走下去,代码行前面灰色部分右键,有个手的图标,那个是设置断点。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.至于到底是哪里有问题,你就自己再慢慢查吧。要下班了-。-另外吐槽一下,感觉赋值每月的天数放在循环外面比较好。

jfhdibrbfjd

就这个

NightRaid

1、 if((i%4==0)&&(i%100!=0)||(i%400==0))2、else if(year%4==0&&year%100!=0||year%400==0)看看代码中这2行有问题没(菜鸟路过)
打开App,查看更多内容
随时随地看视频慕课网APP