鱼C论坛

 找回密码
 立即注册
查看: 4180|回复: 12

初学C写的东西,有没有更简便的写法?

[复制链接]
发表于 2013-7-29 11:19:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写了好长的代码。。求指教~~~~
计算1年中  的月日 在本年中的第几天。。。还剩下多少天。。

unsigned int nian = 0, yue =0, ri = 0;
         int  n =365;
        for (;;)
        {
                do {
                        printf("请输入年份:");   
                        scanf("%d",&nian);
                        if (nian>9999 || nian <1000)
                        {
                                printf("您的输入有误,请重新输入年份!\n");
                                scanf("%*[^\n]%*c");
                        }
                } while (nian > 9999 || nian < 1000 );

                do{
                        printf("请输入月份:");
                        scanf("%d",&yue);
                        if (yue>12 || yue <= 0)
                        {
                                printf("您的输入有误,请重新输入月份!\n");
                                scanf("%*[^\n]%*c");
                        }        
                }while(yue>12 || yue <= 0);

                do {
                        printf("请输入日期:");
                        scanf("%d",&ri);        
                        if (ri>31 || ri <= 0)
                        {
                                printf("您的输入有误,请重新输入日期!\n");
                                scanf("%*[^\n]%*c");
                        }
                } while (ri>31 || ri <= 0);

                if (yue == 1 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri);
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 2 && ri <= 28)
                {
                        printf("今天是本年的第%d天!\n", ri += 31);
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 3 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 4 && ri <= 30)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 5 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 6 && ri <= 30)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 7 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 8 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30+31));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 9 && ri <= 30)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30+31+30));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 10 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30+31+30+30));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 11 && ri <= 30)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30+31+30+30+31));
                        printf("本年还剩下%d天!\n",n-ri);
                }
                else if (yue == 12 && ri <= 31)
                {
                        printf("今天是本年的第%d天!\n", ri += (31+28+31+30+31+30+31+30+30+31+31));
                        printf("本年还剩下%d天!\n",n-ri);
                }
        }
         return 0;
}



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 12:28:04 | 显示全部楼层
这,这,else if  有点长啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-29 12:45:16 | 显示全部楼层
就是啊。我也是感觉太长了。。。想不到什么简化的方法。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 13:14:44 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-29 14:07:26 | 显示全部楼层
编程难 发表于 2013-7-29 13:14
建议封装下,把相同的功能封装到一起,然后调用

如果不封装。。有没有什么简便的写法??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 14:08:12 | 显示全部楼层
可以建立一个数组存储前n个月的天数。
运用函数调用。Switch语句什么的……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 15:09:19 | 显示全部楼层
ymgsk123 发表于 2013-7-29 14:07
如果不封装。。有没有什么简便的写法??

这是逻辑问题了。建议自己思考,别人也是思考后才能给出他的解答的。我回去也想想,不过逻辑问题靠别人不大靠谱的,尤其是以后工作了,基本靠不上的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 15:24:08 | 显示全部楼层
如果是我,我会用switch-case
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 15:26:04 | 显示全部楼层
用 sweitch 就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-29 21:39:21 | 显示全部楼层
哎。。对啊。。我没想到用。。。sweitch     一直用if。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 23:03:38 | 显示全部楼层
switch-case-break就很好用啊~慢慢来嘛~现在就用复杂的,等你以后学进去了,再简化,现在简化不好,慢慢来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-9 00:02:00 | 显示全部楼层
都有道理  认真学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-9 00:09:26 | 显示全部楼层
个人感觉 首先自定义函数 然后 不要用 if elseif 用switch 至于计算可以先定义一个数组吧每月的天数放进去 到时候用for 就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 20:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表