曲径通幽论坛

标题: 输出下一秒时间 [打印本页]

作者: beyes    时间: 2009-7-25 23:20
标题: 输出下一秒时间
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
#include <stdio.h>
#include <stdlib.h>

void next_second(int *year, int *month, int *day, int *hour, int *min, int *second);

int main()
{
    int year, month, day, hour, min, second;

    printf("input year: ");
    scanf("%d", &year);
    printf("\n");

    printf("input month: ");
    scanf("%d", &month);
    printf("\n");

    printf("input day: ");
    scanf("%d", &day);
    printf("\n");

    printf("input hour: ");
    scanf("%d", &hour);
    printf("\n");

    printf("input min: ");
    scanf("%d", &min);
    printf("\n");

    printf("input second: ");
    scanf("%d", &second);
    printf("\n");
   
    next_second(&year, &month, &day, &hour, &min, &second);
   
}



void next_second(int *year, int *month, int *day, int *hour, int *min, int *second)
{
    int leap = 0;
   
    if ((*year % 4 == 0 && *year % 100 != 0) || *year % 400 == 0)
        leap = 1;
   

    if ( *year < 1900 || *year > 2099 ) {
        printf("请输入在 1900 年与2099 年之间的年数!\n");
        exit(1);
    }

    if( (*second < 0 || *second > 59) || (*min < 0 || *min > 59) || (*hour < 0 || *hour > 23) || (*day < 0 || *day > 31) || (*month < 0 || *month > 12)){
        printf("输入时间错误!\n");
        exit(1);
    }

    if( *month == 2 || *month == 4 || *month == 6 || *month == 9 || *month == 11) {
        if( *day > 30 ) {
            printf("对应月份没有 31 天!\n");
            exit(1);
        }
    }
    if ( *month == 2 && *day > 28) {
        if (!leap ) {
            printf("非闰年2月最大天数为28天!\n");
            exit(1);
        }
    }
                        
    if (*second != 59) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month, *day, *hour, *min, *second+1);
        exit(0);
    }
    if (*min != 59) {   
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month, *day, *hour, *min+1, 0);
        exit(0);
    }
    if (*hour != 23) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month, *day, *hour+1, 0, 0);
        exit(0);
    }
    if (*day < 28) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month, *day+1, 0, 0, 0);
        exit(0);
    }
    if (*day == 28 && *month == 2 && leap == 0) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, 3, 1, 0, 0, 0);
        exit(0);
     }
    if (*day == 29 && *month == 2) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, 3, 1, 0, 0, 0);
        exit(0);
    }
    if (*day == 31 && *month == 12) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year+1, 1, 1, 0, 0, 0);
        exit(0);
    } else if (*day == 31 && *month != 12) {
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month+1, 1, 0, 0, 0);
        exit(0);
    } else {           
        printf("下一秒时间为:%d年%d月%d日%d时%d分%d秒\n", *year, *month+1, 1, 0, 0, 0);
        exit(0);
    }
        
   

}





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2