题目
本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
输入格式
![](https://img-blog.csdnimg.cn/img_convert/45f14bf4bbdef6768b56ea2e4cd0ac97.png)
输出格式
![](https://img-blog.csdnimg.cn/img_convert/42ac89d9f24e53e2110992754be9f421.png)
案例
输入样例
![](https://img-blog.csdnimg.cn/img_convert/5d80558d2ec33cb280775dbe3ca88209.png)
输出案例
![](https://img-blog.csdnimg.cn/img_convert/bfa41ca02e1bf41581919d26d5648449.png)
![](https://img-blog.csdnimg.cn/img_convert/c0c2534ab54eb3731ff30f064ce6880d.png)
测试结果
![](https://img-blog.csdnimg.cn/img_convert/1fb18539f2a223266ae286f7173cf91e.png)
思路
![](https://img-blog.csdnimg.cn/img_convert/da48415d8617bb90b4b8dbf3f76a44a9.png)
上代码
#include<stdio.h>
struct time { //创建一个结构体,用来装给定的时间:时,分,秒)
int hour;
int minute;
int second;
};
int main(void)
{
struct time t; //定义结构变量t
int n;
scanf("%d:%d:%d", &t.hour, &t.minute, &t.second); //给定时间
scanf("%d", &n); //输入要增加的秒数
if (n < 60 && n>=0) {
if ((t.second + n)>=60) { //改变后秒超过59
t.second = t.second + n - 60;
if (t.minute == 59) { /*改变后分超过59*/
t.minute = 00;
//也可以写成t.minite = 0; 只不过我是因为看习惯时间表示成00了,就不改了 哈哈哈
if (t.hour == 23) { //改变后小时超过24
t.hour = 00;
}else { //改变后小时未超过24
t.hour++;
}
}else { /*改变后分未超过59*/
t.minute++;
}
}else { //改变后秒未超过59
t.second = t.second + n;
}
printf("%02d:%02d:%02d", t.hour, t.minute, t.second); //输出改变后的时间
}
return 0;
}
补充亿点点知识
友友们知道这里为啥是%02d,而不是%2d吗?
因为如果是整点/整分/整秒的话,要打印00,就需要在0前面补一个0哦,而用%2d只能输出宽度为2,向右对齐,前面有个空格的0哦,这就不符合要求了呀。
解决方案:用%02d
想继续了解相关知识,这边请~~~
【C/C++】%2d,%02d是什么意思 - 腾讯云开发者社区-腾讯云 (tencent.com)
以上仅是我个人的思考,如若有误,欢迎指正!
如果喜欢我的文章,那就点个赞赞吧~~嘻嘻~~