首页 > 电脑

请大家帮忙看一下这段代码为何跑得起来但结果不对(c语言)

更新时间2021-10-13 20:19:08

这是一个输入年份与月份能判断这个月第一天是周几的代码,但运行以后D,a,b变成0,我也找了好久不知道错在哪(1900年一月一日是周一)
#include<stdio.h>
int main()
{
int O,a,b,y,m,D,q,W,n;
O=1900; 
a=0;//闰年数量 
b=0;//非闰年数量
printf("Please input the year "); 
scanf("%d",&y);//输入年
printf("Please input the month ");
scanf("%d",&q);//输入月
while(O==y)//
 {
 if (O%100==0) 
 {
 if(O%400==0)
 {
 a=a+1;
 O=O+1;
}
else
{
b=b+1;
O=O+1;
}
}
else
{
if(O%4==0)
{
a=a+1;
O=O+1;
 
}
else
{
b=b+1;
O=O+1;
}
}
continue;
 };
D=a*366+b*365;
m=1;
while(m==q)
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
D=D+31;
m=m+1;
}
 else
{
if(m==2)
{
if(O%100==0)
{
if(O%400==0)
{
D=D+29;
m=m+1;
}
else
{
D=D+28;
m=m+1;
}
}
else
{
if(O%4==0)
{
D=D+29;
m=m+1;
}
else
{
D=D+28;
m=m+1;
}
}
  }
  else
  {
  D=D+30;
  m=m+1;
   } 
}
 };
 n=D%7;
 W=1+n;
 printf("%d ",D);
 printf("%d ",W);
 return 0; 
 }

一个明显的错

while(O==y)//

除非你输入的y==O

否则循环永远不会执行

a或b当然为0了

正确的应该是while(O!=y)

同样的是while(m==q)

(你对循环条件理解有问题)

另外,你计算闰年的方法太复杂了,一般只要一条语句

 if (((O%4==0)&&(O%100!=0))||O%400==0)

相关标签:c语言

上一篇:佳能G2810喷嘴检查的时候出现这个问题帮忙看看什么问题

下一篇:全局静态变量存放在进程地址空间中的哪一块?