C语言switch语句 错误 请指教

#include "stdio.h"
void main()
{
int year,month,day;//定义年月,天数,闰年等于366天,平年等于365天
printf("请输入月份、年份:");
scanf("%d%d",&month,&year);
switch(month)
{
case 1:day=31;break;
case 2:day=28;break;
case 3:day=31;break;
case 4:day=30;break;
case 5:day=31;break;
case 6:day=30;break;
case 7:day=31;break;
case 8:day=31;break;
case 9:day=30;break;
case 10:day=31;break;
case 11:day=30;break;
case 12:day=31;break;
}
if((year%4==0 && year%100!=0 || year%400==0) && month==2)
{
day=29;
}
printf("该月份有%d天\n",day);
if(year%4==0 && year%100!=0 || year%400==0)
{
day=366;
}
printf("该年份等于%d天\n",day);

就是下面的代码有错误  不知道用什么语句 求指教 谢谢了
**_if(year%4!=0 && year%100==0 || year%400!=0)
{
    printf("该年份等于365天\n");
}**_
效果如下

![图片说明](https://img-ask.csdn.net/upload/201512/09/1449662717_585632.png)

}

逻辑问题

! (A and B or C) 应该是 (!A or !B) and !C

if ( (year%4!=0 && year%100==0) && year%400!=0 )

其实直接改为:
if(year%4==0 && year%100!=0 || year%400==0)
{
day=366;
}
else
day=365;

更简单直接。

(上面写错了)

! (A and B or C) 应该是 (!A or !B) and !C

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

其实直接改为:
if(year%4==0 && year%100!=0 || year%400==0)
{
day=366;
}
else
day=365;

更简单直接。

条件错了。
两个if条件分别是:
year%4==0 && year%100==0 || year%400==0

year%4!=0 && year%100!=0 || year%400!=0

(上面写错了)

! (A and B or C) 应该是 (!A or !B) and !C

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

其实直接改为:
if(year%4==0 && year%100!=0 || year%400==0)
{
day=366;
}
else
day=365;

更简单直接。

(上面写错了)

! (A and B or C) 应该是 (!A or !B) and !C

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

其实直接改为:
if(year%4==0 && year%100!=0 || year%400==0)
{
day=366;
}
else
day=365;

更简单直接。

为了逻辑清晰,我建议使用括号,这样更能发现错误,例如问题中应先检查year%100==0,再检查year%4==0或者year%400==0

printf("该年份等于%d天\n",day);
这句代码上边加上
else day=365;//表示不是闰年的话day=365
同时,注意一点scanf("%d%d",&month,&year);这句代码中你设置的输入格式是用空格来分隔数字,
如果你在输入的两个数字中加了逗号或者是其他字符来分隔数字,自然第二个year变量中的值就不能取到准确的值,
但是程序不会报错,会得到错误的结果。

至于判断条件,&&与运算的优先级是高于||或运算优先级的,所以即使不加括号也没问题,逻辑判断没有问题,只是少了一个else day=365;

上面的都已经解决了,还是你没把逻辑搞清楚,运算符的优先级

写程序的时候多加括号是个好习惯