面试题--1 输入时间要求输出下一秒

#include <stdio.h>
#include <time.h>
 
int Nextsecond(int *nyear, int *nmonth, int *ndate, int *nhour, int *nminute, int *nsecond)
{
    /* 把传入的日期秒加1 */
    int ndays = 0;
 
    (*nsecond)++;
    if (*nsecond >= 60)/* 大于60秒 秒置0 分钟加1*/
    {
        *nsecond = 0;
        (*nminute)++;
        if (*nminute >= 60)/*分钟大于60 小时加1 */
        {
            *nminute = 0;
            (*nhour)++;
            if (*nhour >= 24)/*大于24小时 天加1 */
            {
                *nhour = 0;
                (*ndate)++;
                ndays = GetMonthday(*nyear, *nmonth);/*把每月的天数甩出来*/
                if ((*ndate > ndays) && (ndays > 0))/* 如果大于31或者30 月加1 */
                {
                    *ndate = 1;
                    (*nmonth)++;
                        if (*nmonth > 12)/* 如果月大于12 年加1*/
                        {
                            *nmonth = 1;
                            (*nyear)++;
                        }
                }
            }
        }
    }
    return 0;
}
 
int GetMonthday(int nyear, int nmonth)
{
    int ndays = -1;//?
    if (nmonth >= 1 && nmonth <= 12)
    {
        switch(nmonth)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                ndays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                ndays = 30;
                break;
            case 2:/* 闰年29 平年28*/
                if (isleapyear(nyear))
                {
                    ndays = 29;
                }
                else
                {
                    ndays = 28;
                }
        }
    }
    return ndays;
}
int isleapyear(int nyear)
{
    if (nyear < 0)
    {
        nyear = -nyear;
    }
    return ((nyear % 400 == 0) || (nyear % 4 == 0 && nyear % 100 != 0)) ? 1 : 0;
    /* 闰年:1能被400整除 2 能被4整除但是不能被100整除 */
}
 
int main(int argc, char *argv[])
{    
    time_t Nowtime;
    Nowtime = time(NULL);
    struct tm *TimeInfo;
    TimeInfo = localtime(&Nowtime);
    /*输出当前时间*/
    int nyear = TimeInfo->tm_year + 1900;
    int nmonth = TimeInfo->tm_mon + 1;
    int ndate = TimeInfo->tm_mday;
    int nhour = TimeInfo->tm_hour;
    int nminute = TimeInfo->tm_min;
    int nsecond = TimeInfo->tm_sec;
 
    printf("当前时间:%d年%d月%d日--%d时%d分%d秒 ", nyear, nmonth, ndate, nhour, nminute, nsecond);
 
    Nextsecond(&nyear, &nmonth, &ndate, &nhour, &nminute, &nsecond);
 
    printf("下一秒:%d年%d月%d日--%d时%d分%d秒 ", nyear, nmonth, ndate, nhour, nminute, nsecond);
    /*以上是获取系统时间*/
 
    printf("请输入 年-月-日-十-分-秒 ");
    scanf("%d-%d-%d-%d-%d-%d", &nyear, &nmonth, &ndate, &nhour, &nminute, &nsecond);
    Nextsecond(&nyear, &nmonth, &ndate, &nhour, &nminute, &nsecond);
    printf("下一秒:%d年%d月%d日--%d时%d分%d秒 ", nyear, nmonth, ndate, nhour, nminute, nsecond);
    /*手动输入时间*/
 
    return 0;
}
原文地址:https://www.cnblogs.com/acer-haitao/p/5709948.html