天天好心情:-)

<<<<<每天进步一点点<<<<<

老谢ID:adm_qxx
35705次访问,排名3033好友1人,关注者3
如果仅仅因为懒惰而没有将你潜能发挥出来,那是一件多么可惜的事情。
adm_qxx的文章
原创 38 篇
翻译 2 篇
转载 12 篇
评论 362 篇
老谢的公告
好咖啡要和朋友一起品尝
月 [下月] [上月]
最近评论
ss:谢了,拿过去试试看了。
czdvcc:wow power leveling
shajunjin:谢谢,非常感谢
好:很好很好,对我帮助挺大,谢谢
adm_qxx:我觉的一个人,如果能多一点体谅别人就很不错了。
文章分类
收藏
相册
瞬间成为永恒
常用链接
C++ Home
Cplusplus
Linux Source
Linux 内核分析
中国IT考试论坛
周伟明
天极网
希赛网
海天一色
编程中国
编程未眠夜
编程爱好者
编程论坛
网易学院
友情 Blog
.NET天空
一叶轻舟
偶要雷锋电子书下载
阿高的Blog
知识收藏
HTML学习
Justing的专栏
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 C语言练习题:得到下一秒的时间收藏

新一篇: Array is not pointer (数组不是指针) | 旧一篇: 函数调用的传值和“传址”

// ***************************************************************
// 例如输入当前时间2006年12月20日19时17分59秒,
// 计算后输出时间是2006年12月20日19时18分00秒。
// 程序要求:
// 1) 程序应该可以运行:通过控制台输入数据,输出数据通过printf给出;
// 2) 程序结构明了、逻辑清晰;
// 3) 请考虑闰年、月份(大小)等逻辑;
// 4) 程序功能完整;
// ***************************************************************


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int Month_Day[2][12] = {
 {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
 {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

//判断是否是闰年,是则返回1,否则返回0
int isLeapYear(int y)
{
 return ((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)));
}


// 得到下一天的日期,M:月份,0~11,日期[0~31]
void getNextDay(int * Y,int * M,int * D)
{
 int iC1 = 0, iC2 = 0;     //记录进位
  
 iC2 = ((*D) + 1) / Month_Day[isLeapYear(*Y)][(*M)];
 *D = ((*D) + 1) % Month_Day[isLeapYear(*Y)][(*M)];
 
 iC1 = ((*M) + iC2) / 12;
 *M = ((*M) + iC2) % 12;

 *Y += iC1;
}

// 得到下一秒的时间,如果返回小时向前的进位
int getNextSec(int * h,int * m,int * s)
{
 int iC1 = 0, iC2 = 0;
 iC1 = (*s + 1) / 60;
 *s = (*s + 1) % 60;
 
 c2 = (*m + iC1) / 60;
 *m = (*m + iC1) % 60;
 
 iC1 = (*h + iC2) / 24;
 *h = (*h + iC2) % 24;
 
 return iC1;
}

//得到下一秒的时间
void nextSec(struct tm * st)
{
 //得到时间的下一秒,返回进位
 int c = getNextSec(& st->tm_hour, & st->tm_min, & st->tm_sec);
 if ( c != 0 )  //如果
 {
  getNextDay(& st->tm_year, & st->tm_mon, & st->tm_mday);
 }
}

//输入时间
struct tm * inPutTime(struct tm * st)
{
 printf("请输入时间(格式:yy mm dd hh mi ss):\n");
 while( 6 != scanf("%d%d%d%d%d%d",    //如果输入不正确则继续提示输入
  & st->tm_year, & st->tm_mon, & st->tm_mday,
  & st->tm_hour, & st->tm_min, & st->tm_sec))
 {
  printf("输入格式错误,请重新输入\n"
   "\t格式:yy mm dd hh mi ss\n");

  fflush(stdin);  //清除输入缓冲区
 }
 st->tm_mon -= 1;  //输入的月份转换成内部存储的月份
 st->tm_mday -= 1;  //输入的日期转换成内部存储的日期
 return st;
}

//输出日期和时间
void outPutTime(struct tm *st)
{
 //输出日期
 printf("%d年%d月%d日", st->tm_year, st->tm_mon +1, st->tm_mday +1);
 //输出时间
 (st->tm_hour < 10) ? printf("0"):printf("");
 printf("%d时", st->tm_hour);
 (st->tm_min == 0) ? printf("0"):printf("");
 printf("%d分", st->tm_min);
 (st->tm_sec == 0) ? printf("0"):printf("");
 printf("%d秒", st->tm_sec);
}

int main()
{
 struct tm  st;
 inPutTime(&st);

 printf("\n当前时间:\n");
 outPutTime(&st);
 nextSec(&st);
 printf("\n一秒以后的时间是:\n");
 outPutTime(&st);
 printf("\n");

 system("pause");
 return 0;

发表于 @ 2007年04月24日 15:34:00|评论(loading...)|编辑

新一篇: Array is not pointer (数组不是指针) | 旧一篇: 函数调用的传值和“传址”

评论

#borenbao 发表于2007-04-29 17:19:28  IP: 125.34.129.*
#include <time.h>
int main()
{
time_t now;
struct tm ttm;

ttm.tm_sec = 59;
ttm.tm_min = 19;
ttm.tm_hour = 23;
ttm.tm_mday = 4;
ttm.tm_mon = 2;
ttm.tm_year = 2007-1900;

now = mktime(&ttm)+1;
printf("%s",ctime(&now));
}

这样不行吗?
#adm_qxx 发表于2007-05-02 11:12:59  IP: 220.201.38.*
多谢老兄提醒,过后该一下
#Andre 发表于2007-10-10 22:46:15  IP: 218.107.55.*
time_t t;
time(&t);
struct timeval tv;
tv.tv_sec = time + 1;
tv.tv_usec = 0;
char * own_gmtime(struct timval * p);
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 老谢