我想知道是否有方法從控制檯讀取日期格式爲dd.mm.yyyy的C語言。我有一個包含日期信息的結構。我嘗試了與日期,月份和年份的其他結構:日期格式dd.mm.yyyy在C中
typedef struct
{
int day;
int month;
int year;
} Date;
但點是一個問題。任何想法?
我想知道是否有方法從控制檯讀取日期格式爲dd.mm.yyyy的C語言。我有一個包含日期信息的結構。我嘗試了與日期,月份和年份的其他結構:日期格式dd.mm.yyyy在C中
typedef struct
{
int day;
int month;
int year;
} Date;
但點是一個問題。任何想法?
可以使用strptime()
以任意格式的日期字符串讀入struct tm
。
#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