| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 733 人关注过本帖
标题:大神帮我看看这个小程序的问题
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
大神帮我看看这个小程序的问题
已知今年的周号和星期求日期,返回月份的日期
#include <stdio.h>
#include <time.h>
int day(int b,int c)
{

      struct tm tp={0,0,0,1,1,2016,0,0,0},*tp1,*tp3;
    time_t lt_new,now2;
    long mt;
    now2=lt_new=mktime(&tp);
    tp1=localtime(&lt_new);
    while(tp1->tm_wday!=0)   //使指针指向第一个星期天
    {
        tp1->tm_mday++;
        lt_new=mktime(tp1);
        tp1=localtime(&lt_new);
    }
     mt=(b-2)*7+c+tp1->tm_mday-1;
     mt=mt*3600*24;                 //从第一天开始总共经过了多少秒
     now2=now2+mt;
     tp3=localtime(&now2);
    return tp3->tm_mday;
   
}
main()
{
   printf("%d",day(3,6));
}

[此贴子已经被作者于2016-8-3 18:44编辑过]

搜索更多相关主题的帖子: include 
2016-08-03 18:29
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:20 
劳驾给个完整的代码。另外截图中第四行那个红红的逗号是中文的,要改成半角字符哦!!!
图片附件: 游客没有浏览图片的权限,请 登录注册


φ(゜▽゜*)♪
2016-08-03 18:36
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 2楼 书生牛犊
加上去了,帮忙看看。
2016-08-03 18:45
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
时间类库函数我也不熟,我查询了一下,time_t就是long long ,所以用lld输出,居然是-1誒,感觉你初始化的tp{}是不是有问题?
localtime(-1)估计返回的也是个空指针,所以当程序运行到12行就直接异常终止(原因是要访问NULL->tm_wday,当然不行咯)
图片附件: 游客没有浏览图片的权限,请 登录注册


解决方法,,我不知道诶,,反正就是围绕tp的初始化找找解决方案。当然,希望其他同仁也可以分享下,

φ(゜▽゜*)♪
2016-08-03 19:11
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
参考百度百科“struct tm”词条的解释,修改程序如下
程序代码:
#include <stdio.h>
#include <time.h>
int day(int b,int c) {

    struct tm tp= {0,0,0,1,1-1,2016-1900,0,0,0},*tp1,*tp3;//注意这里2016-1900,月份从0到11
    time_t lt_new,now2;
    long mt;
    now2=lt_new=mktime(&tp);
    printf("%lld",now2);
    tp1=localtime(&lt_new);
    printf("+");
    while(tp1->tm_wday!=0) { //使指针指向第一个星期天
        printf("*");
        tp1->tm_mday++;
        lt_new=mktime(tp1);
        tp1=localtime(&lt_new);
    }
    printf("-");
    mt=(b-2)*7+c+tp1->tm_mday-1;
    mt=mt*3600*24;                 //从第一天开始总共经过了多少秒
    now2=now2+mt;
    tp3=localtime(&now2);
    return tp3->tm_mday;

}
main() {
    printf("%d",day(3,6));
}
结果是16,貌似没错了,那么你应用的时候记得把我加进去的printf()删掉哦



φ(゜▽゜*)♪
2016-08-03 19:25
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 5楼 书生牛犊
看网上知道日期求星期几都是用蔡勒工式!谢谢你啦!
2016-08-03 20:11
快速回复:大神帮我看看这个小程序的问题
数据加载中...
 
   



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

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