C의 dd.mm.yyyy 형식으로 콘솔에서 날짜를 읽는 방법이 있는지 알고 싶습니다. 날짜 정보가있는 구조가 있습니다. 나는 일, 달, 년이있는 다른 구조체를 사용해 보았습니다 :날짜 형식 dd.mm.yyyy in C
typedef struct
{
int day;
int month;
int year;
} Date;
그러나 점이 문제가됩니다. 어떤 생각?
C의 dd.mm.yyyy 형식으로 콘솔에서 날짜를 읽는 방법이 있는지 알고 싶습니다. 날짜 정보가있는 구조가 있습니다. 나는 일, 달, 년이있는 다른 구조체를 사용해 보았습니다 :날짜 형식 dd.mm.yyyy in C
typedef struct
{
int day;
int month;
int year;
} Date;
그러나 점이 문제가됩니다. 어떤 생각?
당신은 struct tm
에 임의의 형식의 날짜 문자열에서 읽을 strptime()
를 사용할 수 있습니다.
#define _XOPEN_SOURCE /* glibc2 needs this to have strptime(). */
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <errno.h>
...
Date d = {0};
char * fmt = "%d.%m.%Y";
char s[32] = "";
char fmt_scanf[32] = "";
int n = 0;
sprintf(fmt_scanf, "%%%ds", sizeof(s) - 1); /* Created format string for scanf(). */
errno = 0;
if (1 == (n = scanf(fmt_scanf, s)))
{
struct tm t = {0};
char * p = strptime(s, fmt, &t);
if ((s + strlen(s)) != p)
{
fprintf(stderr, "invalid date: '%s'\n", s);
}
else
{
d.day = t.tm_mday;
d.month = t.tm_mon + 1; /* tm_mon it zero-based. */
d.year = t.tm_year + 1900; /* tm_year is years since 1900. */
}
}
else
{
perror("scanf()");
}
업데이트는 :
긍정적 인 부작용이 길을가는 addtional 이익은 다음과 같습니다 그것은 모든 strptime()
에 의해 이루어집니다로
fmt
이 다른 형식 문자열을 가리 키도록하십시오.
제목에 dd/mm/yyyy 또는 dd.mm.yyyy와 같은 질문을 하시겠습니까? – Jens
콘솔에서 문자열을 읽고 구문 분석을하면 특정 달에 x 일 또는 월 var이 13 이하인지 확인합니다. – skytz