为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
凡人0123 2016-05-10 14:56:47
这是一个打印日历的代码,我下面的代码有一处有一个问题(加粗的那一个部分),我在定义变量的时候,为什么交换了顺序以后就变好了,想请问一下这是为什么? #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.

至于到底是哪里有问题,你就自己再慢慢查吧。要下班了-。-


另外吐槽一下,感觉赋值每月的天数放在循环外面比较好。

查看完整回答
反对 回复 2016-05-11
?
jfhdibrbfjd

TA贡献163条经验 获得超40个赞

//img1.sycdn.imooc.com//57348ca90001083109050562.jpg就这个

查看完整回答
反对 回复 2016-05-12
?
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行有问题没(菜鸟路过)

查看完整回答
反对 回复 2016-05-10
  • 3 回答
  • 0 关注
  • 1653 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信