| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 817 人关注过本帖
标题:新人,求教关于枚举器的疑惑
只看楼主 加入收藏
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
收藏
已结贴  问题点数:10 回复次数:2 
新人,求教关于枚举器的疑惑
我自己的理解,使用枚举器是用来简少声明,简便输出的方式,但是我看书中练习题答案,使用枚举器也没有简化程序

原题:
习题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(“。。”)
~~

请问,是像答案中那样使用枚举器有优点,还是有更好的方法。

预谢!


搜索更多相关主题的帖子: 枚举 输入 printf case break 
2019-03-23 01:28
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
收藏
得分:0 
百度了下,似乎是if可以输出多个为 真 的判断,而switch()是从数个条件中输出一个。
但还是搞不懂上面代码中,枚举器的作用。
2019-03-23 03:38
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:10 
枚举从来没说是简化啥
枚举就是给整型常量起一个名字而已

https://zh.
2019-03-23 18:33
快速回复:新人,求教关于枚举器的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044885 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved