c语言:从键盘上输入一个日期,判断输入的日期是否正确

如题所述

    定义一个12元素的int型数组存放1月份至12月份每个月的天数;

    根据输入的年份判断是否为闰年,对上述数组中2月份的天数进行调整;

    判断年份大于0、月份大于0小于13、日期大于0小于等于月份对应的天数为正确输入,否则为错误输入。

代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
    int y,m,d,md[12]={31,28,31,30,31,30,31,31,30,31,30,31};//md是每月天数数组
    printf("Please enter the year, month, day(separated by ' ')...\n");
    scanf("%d%d%d",&y,&m,&d);
    md[1] = y%4==0 && y%100 || y%400==0 ? 29 : 28;//闰年调整
    if(y>0 && m>0 && m<13 && d>0 && d<=md[m-1])//判断输入是否正确
        printf("Your input is correct!\n");//正确输出
    else
        printf("Error...\n");//错误输出
    return 0;
}

运行样例如下:


温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-16
int IsLeapYear(int iYear)
{
 if (iYear<1600||iYear>=10000)
 {
  return -1;
 }
 if (iYear%4==0&&iYear%100!=0||iYear%400==0)//判断闰年的条件
 {
  return 1;
 }else
 {
  return 0;
 }
}

int DateCheck(int iYear,int iMonth,int iDay)   
{
 if (iYear<1600||iYear>=10000||iMonth>12||iMonth<1||iDay<1||iDay>31)
 {
  return 0;
 }
 if (iMonth==4||iMonth==6||iMonth==9||iMonth==11)
 {
  if (iDay==31)
  {
   return 0;
  }
 }else if (iMonth==2)
 {
  if (IsLeapYear(iYear)==0)
  {
   if (iDay>28)
   {
    return 0;
   }
  }else
  {
   if (iDay>29)
   {
    return 0;
   }
  }
 }
 return 1;
}

 核心代码就是这些,另外你自己写主函数,调用DateCheck函数就可以了。

本回答被网友采纳
相似回答