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

概述

请编写函数,输入时间。

函数原型

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:%dn", 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; 错误逻辑和上面同理,假设你输入的是三个字符,本应是错误时间,而因为三个变量初值为零,还是会正常输出。

代码如下:

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");
    }
}

最后

以上就是追寻胡萝卜为你收集整理的时间类型 - 输入时间(基础版)的全部内容,希望文章能够帮你解决时间类型 - 输入时间(基础版)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部