| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9892 人关注过本帖, 2 人收藏
标题:输入某年某月某日,判断这一天是这一年的第几天,,以下的程序这样编对吗? ...
只看楼主 加入收藏
潇潇筱
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-10-31
结帖率:0
收藏(2)
已结贴  问题点数:20 回复次数:28 
输入某年某月某日,判断这一天是这一年的第几天,,以下的程序这样编对吗?我不知道错在哪额
输入某年某月某日,判断这一天是这一年的第几天,,以下的程序这样编对吗                                                     #include<stdio.h>
void main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
sum=0;
switch(month)
{
 case 12:sum=sum+30;
 case 11:sum=sum+31;
 case 10:sum=sum+30;
 case 9:sum=sum+31;
 case 8:sum=sum+30;
 case 7:sum=sum+31;
 case 6:sum=sum+30;
 case 5:sum=sum+31;
 case 4:sum=sum+30;
 case 3:sum=sum+28;
 case 2:sum=sum+31;
 case 1:sum=sum+day;break;
 default:printf("data error");break;
}
sum=sum+day;  
 if(year%400==0||(year%4==0&&year%100!=0))
  leap=1;
 else
  leap=0;
if(leap==1&&month>2)
sum++;
printf("it is the %dth day.",sum);}
请大神们帮我看看,哪错了啊
谢谢!
搜索更多相关主题的帖子: include 
2012-12-08 15:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
每个case后都要跟break

DO IT YOURSELF !
2012-12-08 15:12
炎黄宇宙
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:104
注 册:2012-11-12
收藏
得分:2 
以下是引用wp231957在2012-12-8 15:12:43的发言:

每个case后都要跟break
回复真不负责,看都不看就乱说,他专门这样写的。加了break能实现功能呢?
2012-12-08 17:01
cyuyancqy
Rank: 2
等 级:论坛游民
帖 子:22
专家分:59
注 册:2012-10-31
收藏
得分:2 
1楼没看懂题吧,这个刚好利用了不加break。你在case1后有了sum=sum+day,在后面的程序中不要加sum=sum+day。
2012-12-08 17:24
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
恩,我记得在哪个书上说的  case后必跟break

我是从来不用switch的

DO IT YOURSELF !
2012-12-08 17:31
cyuyancqy
Rank: 2
等 级:论坛游民
帖 子:22
专家分:59
注 册:2012-10-31
收藏
得分:0 
5楼你书看多了,动手自己编编看,是不是必须要加case
2012-12-08 17:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
不用case语句  也不用switch语句  

DO IT YOURSELF !
2012-12-08 17:34
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
楼主是不是输入格式不对啊scanf("%d,%d,%d",&year,&month,&day);
这要求输入的年月日之间也要用逗号分隔

另,附我刚写的代码  还没怎么测试呢
程序代码:
#include<stdio.h>

int main()
{
    int rui[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int ruiflag=0;
    int day,month,year,sum=0;
    printf("\nplease input year,month,day\n");
    scanf("%d,%d,%d",&year,&month,&day);
    if((year%4==0 &&year%100!=0) || year%400==0) ruiflag=1;
    for(int index=0;index<month-1;index++)
    {
        if(ruiflag==1) sum+=rui[index];else sum+=ping[index];
    }
    sum+=day;
    printf("it is the %d th day.",sum);
    return 0;
}


DO IT YOURSELF !
2012-12-08 18:11
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:2 
我认为二楼是对的,在case后面确实应该加上break
程序代码:
switch(month)
{
 case 12:sum=sum+30;
 case 11:sum=sum+31;
 case 10:sum=sum+30;
 case 9:sum=sum+31;
 case 8:sum=sum+30;
 case 7:sum=sum+31;
 case 6:sum=sum+30;
 case 5:sum=sum+31;
 case 4:sum=sum+30;
 case 3:sum=sum+28;
 case 2:sum=sum+31;
 case 1:sum=sum+day;break;
 default:printf("data error");break;
}


 
在这里运行后在default(默认值)只要没有结束循环最后它都会运行
如输入12,虽然第一个检查为true,但是因为没有break所以它并不会跳出循环
而是继续运行下去,但是它已经不会对应其他的case:了,因为在这里每个case:的条件都是不同的
这样不仅浪费了时间,而且default中的printf语句也会运行
所以在每个case语句的最后都加上break应该是一个很好的习惯。


I have not failed completely
2012-12-08 18:46
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:2 
有很严重的错误呀
 case 1:sum=sum+day;break;
 default:printf("data error");break;
}
sum=sum+day;  
两次执行sum=sum+day;结果应该比正确结果多了个day的值;
还有default后面不用加break,自动跳出的

补充:楼主的思路很巧妙啊,学习了

新手发言,说错勿怪

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-09 13:39
快速回复:输入某年某月某日,判断这一天是这一年的第几天,,以下的程序这样编对 ...
数据加载中...
 
   



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

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