70,037
社区成员
发帖
与我相关
我的任务
分享# include <stdio.h>
int gainint(int *p,int a,int b);
int main(){
int month[]={31,28,31,30,31,30,31,31,30,31,30,31},i;
int charge[6]={1,1,1,2016,12,0};
char zifu[][5]={"年份","月份","天数"};
int a[3];
for(i=0;i<3;i++)
{
printf("请输入%s(%d--%d):\n",zifu[i],charge[i],charge[i+3]);
gainint(&a[i],charge[i],charge[i+3]);
if(i==0)
month[1]=!(a[0]%4&&a[0]%100)||!(a[0]%400)?29:28;
if(i==1)
charge[5]=month[a[1]-1];
}
printf("%04d年%02d月%02d日",a[0],a[1],a[2]);
getchar();
return 0;
}
int gainint(int *p,int a,int b)//a为最小值b为最大值
{
int c[2]={0,1};
do{
scanf("%d",p);
while(getchar()!='\n');
if(*p>b||*p<a)
printf("输入有误,请重新输入(%d--%d):",a,b);
}while(*p>b||*p<a);
return *p;//返回数字的位数
} # include <stdio.h>
int gainint(int *p,int a,int b);
int main(){
int month[]={31,28,31,30,31,30,31,31,30,31,30,31},i;
int charge[6]={1,1,1,2016,12,0};
char zifu[][5]={"年份","月份","天数"};
int a[3];
for(i=0;i<3;i++)
{
printf("请输入%s(%d--%d):\n",zifu[i],charge[i],charge[i+3]);
gainint(&a[i],charge[i],charge[i+3]);
if(i==0)
month[1]=!(a[0]%4&&a[0]%100)||!(a[0]%400)?29:28;
if(i==1)
charge[5]=month[a[1]-1];
}
printf("%04d年%02d月%02d日",a[0],a[1],a[2]);
getchar();
return 0;
}
int gainint(int *p,int a,int b)//a为最小值b为最大值
{
int c[2]={0,1};
do{
scanf("%d",p);
while(getchar()!='\n');
if(*p>b||*p<a)
printf("输入有误,请重新输入(%d--%d):",a,b);
}while(*p>b||*p<a);
while(*p/c[1])
{
c[1]*=10;
c[0]++;
}
return c[0];//返回数字的位数
} 
#include <stdio.h>
int main()
{
int year,month,day;
scanf("%d-%d-%d",&year,&month,&day);
#if 1
if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day<=31) {
printf("YES");
} else if((month==4||month==6||month==9||month==11)&&day<=30) {
printf("YES");
} else if(month==2&&((year%100!=0&&year%4==0)||(year%400==0))&&day<=29) {
printf("YES");
} else {
printf("NO");
}
#else
switch (month) {
case 1: case 3:
case 5: case 7:
case 8: case 10:
case 12:
if (day <= 31) {
printf("YES\n");
} else {
printf("NO\n");
}
break;
case 4: case 6:
case 9: case 11:
if (day <= 30)
printf("YES\n");
else
printf("NO\n");
break;
case 2:
if ((year % 100 != 0 && year % 4 == 0) || (year % 400 == 0)) {
if (day <= 29)
printf("YES\n");
else
printf("NO\n");
} else if (day <= 28) {
printf("YES\n");
} else {
printf("NO\n");
}
default:
printf("Not support!\n");
break;
}
#endif
return 0;
}
参考一下上面的代码,
else总是和上面和它最近的if匹配。
若if else超过3个,建议改用switch case代替。#include <stdio.h>
int main()
{
int year,month,day;
scanf("%d-%d-%d",&year,&month,&day);
if((month==1||month==3||month==5||month==7||month==8||
month==10||month==12)&&day<=31){
printf("YES\n");
}
else if((month==4||month==6||month==9||month==11)&&day<=30){
printf("YES\n");
}
else if(month==2&&((year%100!=0&&year%4==0)||(year%400==0))&&day<=29){
printf("YES\n");
}
else{
printf("NO\n");
}
return 0;
}
这样就好了,相当于else里面镶嵌了else if,对判断过程的细化,注意判断结果的唯一性