请编写函数,输入时间。
函数原型
void TimeInput(MYTIME *time);
说明:参数 time 为指示时间结构变量的指针。函数按“时:分:秒”的格式输入时间,若输入的数据正确,则将数据保存至结构变量中;否则报告错误,不保存数据。
裁判程序
#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:%d\n", h, m, s);
return 0;
}
测试用例1
20:0:0
20:0:0
测试用例2
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;
错误逻辑和上面同理,假设你输入的是三个字符,本应是错误时间,而因为三个变量初值为零,还是会正常输出。文章来源:https://www.toymoban.com/news/detail-792236.html
代码如下:文章来源地址https://www.toymoban.com/news/detail-792236.html
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");
}
}
到了这里,关于时间类型 - 输入时间(基础版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!