C 날짜범위를 입력받는 방법

조회수 657회

달력 프로그램을 만드는 중인데 범위를 입력하고 싶을때는 scanf 함수를 사용하는게 아닌가요? 2021.05.24-2021.08.09처럼 범위를 입력하면 그 달에 맞는 달력을 출력할려고 하는데

scanf_s("%d.%d.%d-%d.%d.%d,&year,&month,&day,&year,&month,&day)

로 하니깐 아예 프로그램이 실행이 안되더라고요 혹시 달력 범위를 입력하는게 따로 있나요?

1 답변

  • "2021.05.24-2021.08.09" 형태를 날짜로 변환하시길 원하신다면 아래 코드를 참고해 보세요

    scanf 로 각각의 값을 입력 받기 보다 문자열 전체로 입력 받은 후 strptime 으로 변환하는 게 더 편합니다.

    물론 입력의 형태가 날짜가 2개 들어 있기 때문에 우선은 ' - ' 문자를 기준으로 2개로 split 해주는 게 좋겠죠?

    #include <stdio.h>
    #include <time.h>
    void main ()
    {
        struct tm t;
        const char* date = "2019-10-21";    // 날짜 문자열: 2019년 10월 21일
        const char* time = "18:16:24";        // 시간 문자열: 18시 16분 24초 
        char* ret=NULL;
        char buf[256];
    
        ret = strptime(date, "%Y-%m-%d", &t);  // 날짜 문자열을 tm 구조체로
        ret = strptime(time, "%H:%M:%S", &t);  // 시간 문자열을 tm 구조체로
    
        strftime(buf, sizeof(buf), "%Y년 %m월 %d일", &t); // tm 구조체에서 날짜를 buf 로
        puts(buf);
        strftime(buf, sizeof(buf), "%H:%M:%S", &t);          // tm 구조체에서 시간을 buf 로
        puts(buf); 
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)