我正在创建一个程序,该程序从用户采用一种日期格式,例如:“01/14/2013”作为字符串并将其输出为月,日和年格式,或者:“1月14,2013" 。当我输入日期时,我无法弄清楚为什么它没有正确输出字符串,例如,如果我输入'01',它输出1月正确,但如果我输入'02',它不会打印完全出二月。这是我的计划:
#include <stdio.h>
#include <string.h>
int main(void) //int main() is c++, int main(void) is C
{
char date[100];
char month[100];
char array[12][100] ={"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November",
"December"};
printf(" Please enter a date ");
fgets( date, 100, stdin);
if( date[0] == '0' && date[1] == '1')
{
strcpy( month, array[0]);
}
else if( date [0] =='0' && date[1] == '2')
{
strcpy( month, array[1]);
}
printf(" %s", month);
return 0;
}
答案 0 :(得分:0)
虽然您可以设置精心设计的解析路由以自定义方式处理日期。您还可以使用strptime
将字符串转换为日期对象,然后使用strftime
以任何所需格式将字符串输出到缓冲区。 man pages
包含我根据您的情况调整的所有格式说明符和示例。看看:
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int
main(int argc, char *argv[])
{
struct tm tm;
char buf[255];
if (argc < 2 ) {
fprintf (stderr, "Error: insufficient input, usage: %s date (mm/dd/yyyy)\n",
argv[0]);
return 1;
}
memset(&tm, 0, sizeof(struct tm));
strptime(argv[1], "%m/%d/%Y", &tm);
strftime(buf, sizeof(buf), "%A, %B %e, %Y", &tm);
printf ("\n The formatted date is: %s\n\n",buf);
return 0;
}
只需在mm/dd/yyyy
格式的命令行中输入任何日期,其输出类似于您要查找的内容:
$ ./bin/s2t 07/08/2014
The formatted date is: Tuesday, July 8, 2014