请编写函数,输入时间。
函数原型
复制代码
1
2void 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
320:0:0 20:0:0
测试用例2
复制代码
1
2
3
424: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
14void 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"); } }
最后
以上就是追寻胡萝卜最近收集整理的关于时间类型 - 输入时间(基础版)的全部内容,更多相关时间类型内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复