对于初学者来说,经常会有题目要求输出一段复杂的文字
比如:用英文方式输出月日年
具体事例具体说我们来看一个例题:
让用户输入三个整数,分别代表月日年。比如用户输入了 12 1 2024,那么我们就要输出
1st December 2024,这是正确的表达方式。
如果我们用switch来进行判断输出,那可能需要写百来行代码,这并不够简洁也太臃肿了,这不利于程序的开发,这并不是我们愿意看到的答案。
那么我们就想,有没有一种办法可以不用反复使用嵌套的switch也可以达到同样的效果呢?
仔细研究发现31个数只有1,2,3,21,22,23这几天是特殊的,他们不同于其他的数,只需要在末尾加上th就可以。发现了这个,我们思考,是不是可以在月份前先用if语句来判断该在数字末尾加上什么尾缀呢?
先来看具体代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int month = 0;
int day = 0;
int year = 0;
//定义月日年为整型变量
printf("请输入三个整数(顺序为月日年):");
scanf("%d%d%d", &month, &day, &year);
if (day > 3 && day < 21 || day>23 && day < 31)
printf("\n%dth ", day);
else
printf("\n%d%s ", day, (day % 10 == 1 ? "st" : (day % 10 == 2 ? "nd" : "rd")));
//判断日
switch (month)
{
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;
}
printf(" %d\n", year);
return 0;
}
可以发现,开头用了if-else语句来判断该给日期加什么尾缀,接下里用switch语句来输出月份,最后直接原样输出年份。
这样一来,比直接使用switch语句打印来的更加简洁美观。