程序:显示法定格式的日期合同和其他法律文档中经常使用下列日期格式:
Dated this day of ,19 .
编写程序用来显示这种格式的日期。用户以月/日的格式录入日期,然后计算机显示出“法定”格式的日期:
Enter date (mm/dd/yy) : 7/19/96
Dated this 19th day of July, 1996.
可以使用printf函数实现主要的格式化。然而,还有两个问题:如何为日添加“th”(或者“st”、“nd”、“rd”),以及如何使用单词代替数字显示月份。幸运的是,switch语句可以很好地解决这两种问题:用一个switch语句负责显示日的后缀,再用另一个switch语句显示出月份名。注意,11日、12日、13日对应的英文是th结尾。
**输入格式要求:"%d/%d/%d" 提示信息:“Enter date (mm/dd/yy):” “Dated this %d” “st/nd/rd/th” " day of " “January/February/…/December”
如果输入的日期不在合法范围内,则输出"Input error!\n"。
**输出格式要求:", 19%.2d.\n"
#include <stdio.h>
int main ( )
{
printf("Enter date (mm/dd/yy):");
int y, m, d;
scanf("%d/%d/%d",&m,&d,&y );
if (y>99||y<1||m>12||m<1||d>31||d<1) {
printf("Input error!\n");return 0;
}
//错误类型一:闰年二月
if ((y%4==0&&y%100!=0)||(y%400==0)) {
if (m == 2&& d > 29) {
printf("Input error!\n");return 0;
}
}
else
{
if (m==2&& d > 28) {
printf("Input error!\n");return 0;
}
}
//其他月份的日期没对上
if(m == 1||m == 3||m==5||m==7||m==8||m==10||m==12)
{
if (d>31) {
printf("Input error!\n");return 0;
}
}
else
{
if (d>30) {
printf("Input error!\n");return 0;
}
}
printf("Dated this %d",d);
switch (d) {
case 1:
case 21:
case 31:
printf("st");
break;
case 2:
case 22:
printf("nd");
break;
case 3:
case 23:
printf("rd");
break;
default:
printf("th");
break;
}
printf(" day of ");
switch (m) {
case 1:
printf("January");
break;
case 2:
printf("February");
break;
case 3:
printf("March");
break;
case 4:
printf("April");
break;
case 5:
printf("May");
break;
case 6:
printf("June");
break;
case 7:
printf("July");
break;
case 8:
printf("August");
break;
case 9:
printf("September");
break;
case 10:
printf("October");
break;
case 11:
printf("November");
break;
case 12:
printf("December");
break;
default:
break;
}
printf(", 19%.2d.\n",y);
return 0;
}
注意事项:
非法日期的判断和结束
用到的常识
一月 January 缩写:Jan.
二月 February 缩写:Feb.
三月 March 缩写:Mar.
四月 April 缩写:Apr.
五月 May 缩写:May.
六月 June 缩写:Jun.
七月 July 缩写:Jul.
八月 August 缩写:Aug.
九月 September 缩写:Sept.
十月 October 缩写:Oct.
十一月 November 缩写:Nov.
十二月 December 缩写:Dec.
1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th ;
11th 12th 13th 14th 15th 16th 17th 18th 19th 20th ;
21st 22nd 23rd 24th 25th 26th 27th 28th 29th 30th 31st