新人,求教关于枚举器的疑惑
我自己的理解,使用枚举器是用来简少声明,简便输出的方式,但是我看书中练习题答案,使用枚举器也没有简化程序。原题:
习题3.2 编写一个程序,提示用户输入3个整数值,分别代表月、日、年。例如用户输入了12、31、2003,程序就以31st December 2003 的格式输出该日期。
必须在日期值的后面加上th、nd、st 和 rd。例如1st、2nd、3rd、4th、11th、12th、13th、14th、21st、22nd、23rd、24th。
答案:
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
// 定义一个代表12个月份的枚举类型,枚举器值从1开始
enum Month { January = 1, February, March, April, May, June, July, August, September, October, November, December };
// 提示用户输入月、日、年
printf("请输入月、日、年:");
scanf("%d%d%d", &month, &day, &year);
// 输出日
if (day < 1 || day > 31)
{
printf("输入日期有误 ");
}
else if (day % 10 == 1 && day != 11)
{
printf("%dst ", day);
}
else if (day % 10 == 2 && day != 12)
{
printf("%dnd ", day);
}
else if (day % 10 == 3 && day != 13)
{
printf("%drd ", day);
}
else
{
printf("%dth ", day);
}
// 输出月
switch (month)
{
case January:
printf("January ");
break;
case February:
printf("February ");
break;
case March:
printf("March ");
break;
case April:
printf("April ");
break;
case May:
printf("May ");
break;
case June:
printf("June ");
break;
case July:
printf("July ");
break;
case August:
printf("August ");
break;
case September:
printf("September ");
break;
case October:
printf("October ");
break;
case November:
printf("November ");
break;
case December:
printf("December ");
break;
default:
printf("输入月份有误 ");
break;
}
// 输出年
printf("%d\n", year);
return 0;
}
疑问:
这样输出月份,和前面输出日期一样用if-els不也没简化么
比如写成:
if(月份 >12 && < 1 )
printf("输入错误");
else if(月份 = 1)
printf(“。。”)
~~
请问,是像答案中那样使用枚举器有优点,还是有更好的方法。
预谢!