C语言验证日期格式是否正确

作者&投稿:庾震 (若有异议请与网页底部的电邮联系)
C语言中怎么判断输入日期格式是否正确,要求输入的格式为年-月-日,如1995-12-06~

char str[100];
memset(str,0,100);
strcpy(str,"1995-12-06")
int year,month,day;
sscanf(str,"%d-%d-%d",&year,&month,&day);//自己调试下就好了

主要验证三个信息:
a.验证月数是否在1~12,m > 0 && m <= 12
b.验证日数是否超过当月,d > 0 && d <= month[m - 1]
c.对平闰年的判断,if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)month[1] = 29
例程:
#include static int is_valid_date(int y, int m, int d){ int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) month[1] = 29; return m > 0 && m 0 && d <= month[m - 1]; }int main(void){ int y, m, d; scanf("%4d-%2d-%2d", &y, &m, &d); if (is_valid_date(y, m, d)) printf("valid date
"); else printf("invalid date
"); return 0;}

#include<stdio.h>
typedef struct {int y,m,d;}Date;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int checkDate(Date date)
{mon[2]=28+(date.y%4==0&&date.y%100||date.y%400==0);
 return date.y>0&&date.m>0&&date.d>0&&date.m<13&&date.d<=mon[date.m];
}
int main()
{ Date date;
  scanf("%d%*c%d%*c%d",&date.y,&date.m,&date.d);
  printf("%s",(checkDate(date)?"OK":"Error"));
  return 0;
}


C语言转换日期的表示形式
答:include <stdio.h> include <string.h> int main(){int month,b,c;scanf("%d/%d/%d",&month,&b,&c);switch(month){ case 1:printf("Jan,%d,%d\n",b,c);break;case 2:printf("Feb,%d,%d\n",b,c);break;case 3:printf("Mar,%d,%d\n",b,c);break;case 4:printf("Apr,%d...

大学C语言课程设计答辩问题,如图
答:根据上面的输出可以看出日期格式位置太短,你可以设定日期显示的长度 printf("%12s", "Mon");如果还是短了或者超了,可以适当调整变量,然后在后面加\t进行控制 这种格式化输出都是调节出来的,因为中文和英文的间距不一样!字体也有差异

C语言求助:时间格式转换
答:include <stdio.h> int main(){ int h,m,s;while(scanf("%d:%d:%d",&h,&m,&s)){ if(h!=12){ h=h%12;} printf("PM:%02d:%02d:%02d\n",h,m,s);} } 未通过,是因为但h,m,s是个位数时,比如我输入12:00:00,输出的是AM:12:0:0,而不是AM:12:00:00,怎么办...

万年历的C语言程序
答:已经编译运行确认过。include <stdio.h> include <stdlib.h> int leap(int); /*判断是否为闰年*/ int md(int m,int y); /*返回本月的天数*/ void prtweek(void); /*输出表头*/ int fw(int m,int y); /*返回本月一号是星期几*/ void prtmonth(int m); /*输出月份表头*/ int ...

C语言编程,帮帮忙这个怎么编?
答:include "stdio.h"void main() { int n, y, r;scanf("%d-%d-%d", &n, &y, &r);printf("%d年%d月%d日\n", n, y, r);}

C语言编程:输入某年某月某日判断这一天是一年的第几天的程序是是什么...
答:printf("请输入年月日格式示例20140101\n");scanf("%4d%2d%2d",&year,&month,&day);//简化后的条件,是闰年且月份大于二,则返回天数加一,否则直接返回函数值 int days = getDays(month,day);if (days==0){ printf("您输入的日期格式无效。\n");return 0;} if (isRunnian(year) && ...

用C语言写一个函数,给出年月日,计算该日是该年的第几天 用#include<ios...
答:代码如下:include <iostream>using namespace std;int leap_year(int n){ if(n%400==0||(n%4==0 && n%100!=0)) return 1; else return 0;}int main(){ int year,month,day; int dayCount=0,i; int mon[]={31,28,31,30,31,30,31,31,30,31,30,31}...

C语言编写万年历系统
答:已经编译运行确认过。include <stdio.h> include <stdlib.h> int leap(int); /*判断是否为闰年*/ int md(int m,int y); /*返回本月的天数*/ void prtweek(void); /*输出表头*/ int fw(int m,int y); /*返回本月一号是星期几*/ void prtmonth(int m); /*输出月份表头*/ int ...

怎样用C语言程序计算每月的一号是星期几
答:1、C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果...

c语言题目,求助大神撒<(~ˇ~)/~ 输入日期,调用函数判断该日期是这一年...
答:include<stdio.h>int main(){int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},y,m,d,i,s; scanf("%d%d%d",&y,&m,&d); if(y%4==0&&y%100||y%400==0)a[2]++; if(m<1||d<1||m>12||y<1||d>a[m]) {printf("Date error!\n"); return 0;} s=d;...