我是靠谱客的博主 追寻胡萝卜,这篇文章主要介绍时间类型 - 输入时间(基础版),现在分享给大家,希望可以做个参考。

请编写函数,输入时间。

函数原型

复制代码
1
2
void TimeInput(MYTIME *time);

说明:参数 time 为指示时间结构变量的指针。函数按“时:分:秒”的格式输入时间,若输入的数据正确,则将数据保存至结构变量中;否则报告错误,不保存数据。

裁判程序

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h> ...... typedef struct { char hour, minute, second; } MYTIME; int IsValidTime(int hour, int minute, int second); void TimeSet(MYTIME *time, int hour, int minute, int second); void TimeGet(const MYTIME *time, int *hour, int *minute, int *second); void TimeInput(MYTIME *time); int main() { MYTIME a = {8, 30, 45}; int h, m, s; TimeInput(&a); TimeGet(&a, &h, &m, &s); printf("%d:%d:%dn", h, m, s); return 0; }

测试用例1

复制代码
1
2
3
20:0:0 20:0:0

测试用例2

复制代码
1
2
3
4
24:60:-15 不正确的时间! 8:30:45

这道题看似简单,实际上有一个很不容易想到的坑,卡了我好久。需要注意的就是在函数中 hour, minute, second 三个局部变量的初始化,一定要不合法!因为很多人定义变量的时候不赋初值或者赋值为零,都会使结果不准确,PTA上过不了,下面简单解释一下这两种赋值方式产生的问题:

  • 不赋初始值:int hour, minute, second; 这样这三个局部变量就都是未知数,当然也就有可能同时满足时间合法的条件啦,0<=hour<=23, 0<=minute<=59, 0<=second<=59,虽然概率极小,但依然有可能发生,所以要排除这种情况(由此可见PTA有多严格)。

  • 初始值赋为零:int hour = 0, minute = 0, second = 0; 错误逻辑和上面同理,假设你输入的是三个字符,本应是错误时间,而因为三个变量初值为零,还是会正常输出。

代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TimeInput(MYTIME* time) { int hour = -1, minute = -1, second = -1; // 需要注意的就是变量初始化,只要是不合法时间数字即可 scanf("%d:%d:%d", &hour, &minute, &second); if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59) { time->hour = hour; time->minute = minute; time->second = second; } else { printf("不正确的时间!n"); } }

最后

以上就是追寻胡萝卜最近收集整理的关于时间类型 - 输入时间(基础版)的全部内容,更多相关时间类型内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部