这个程序哪里有错误啊?我怎么找不出来啊

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:28:07
#include<stdio.h>
#define P printf
void main()
{
int rn(int leap,int n);
int n,y,r,num,leap;
scanf("%d%d%d",&n,&y,&r);//输入年月日
leap=rn(leap,n); //判断是否是闰年
switch(y)
{
case 1:num=r;
case 2:num=31+r;
case 3:if(leap)num=31+28+r;
else num=31+29+r;
case 4:if(leap)num=31+28+31+r;
else num=31+29+31+r;
case 5:if(leap)num=31+28+31+30+r;
else num=31+29+31+30+r ;
case 6:if(leap)num=31+28+31+30+31+r;
else num=31+29+31+30+31+r;
case 7:if(leap)num=31+28+31+30+31+30+r;
else num=31+29+31+30+31+30+r;
case 8:if(leap)num=31+28+31+30+31+30+31+r;
else num=31+29+31+30+31+30+31+r;
case 9: if(leap)num=31+28+31+30+31+30+31+31+r;
else num=31+29+31+30+31+30+31+31+r;

因为要执行switch()语句时,根据switch()后面表达式的植找到匹配的入口标号后,就从此号开始执行下去,不再进行判断.
例如:y=5,就从 case 5: 开始执行,直到最后的 case 12: 所以无论输入y的值是多少结果都是
case 12:if(leap)num=31+28+31+30+31+30+31+31+30+31+30+r;
else num=31+29+31+30+31+30+31+31+30+31+30+r;

要解决这个问题就是在每一句case 语句的后面加一个break;
如下:
switch(y)
{
case 1:num=r;
break;
case 2:num=31+r;
break;
case 3:if(leap)num=31+28+r;
else num=31+29+r;
break;
case 4:if(leap)num=31+28+31+r;
else num=31+29+31+r;
break;
case 5:if(leap)num=31+28+31+30+r;
else num=31+29+31+30+r ;
break;
case 6:if(leap)num=31+28+31+30+31+r;
else num=31+29+31+30+31+r;
break;
case 7:if(leap)num=31+28+31+30+31+30+r;
else num=31+29+31+30+31+30+r;
break;
case 8:if(leap)num=31+28+31+30+31+30+31+r;
else num=31+29+31+30+31+30+31+r;
break;
case 9: if(leap)num=31+28+31+30+31+30+31+31+r;
else num=31+29+31+30+31+30+31