C语言中的日期格式
我正在尝试将以dd/mm/yyyy格式输入的日期更改为年月日格式,我已经完成了大部分操作,但我的输出在日期后添加了一个额外的奇怪字符。这是我的密码C语言中的日期格式,c,C,我正在尝试将以dd/mm/yyyy格式输入的日期更改为年月日格式,我已经完成了大部分操作,但我的输出在日期后添加了一个额外的奇怪字符。这是我的密码 #include <stdio.h> #include <string.h> void main() { char userDate[11]; char dateWord[11]; char day[2]; char year[4]; printf("Welcome to the Dat
#include <stdio.h>
#include <string.h>
void main()
{
char userDate[11];
char dateWord[11];
char day[2];
char year[4];
printf("Welcome to the Date Formatter.\nPlease input a date in the form of mm/dd/yyyy.\n");
scanf("%s", userDate);
day[0] = userDate[3];
day[1] = userDate[4];
year[0] = userDate[6];
year[1] = userDate[7];
year[2] = userDate[8];
year[3] = userDate[9];
if (userDate[0] == '0' && userDate[1] == '1')
strcpy(dateWord, "January");
if (userDate[0] == '0' && userDate[1] == '2')
strcpy(dateWord, "February");
if (userDate[0] == '0' && userDate[1] == '3')
strcpy(dateWord, "March");
if (userDate[0] == '0' && userDate[1] == '4')
strcpy(dateWord, "April");
if (userDate[0] == '0' && userDate[1] == '5')
strcpy(dateWord, "May");
if (userDate[0] == '0' && userDate[1] == '6')
strcpy(dateWord, "June");
if (userDate[0] == '0' && userDate[1] == '7')
strcpy(dateWord, "July");
if (userDate[0] == '0' && userDate[1] == '8')
strcpy(dateWord, "August");
if (userDate[0] == '0' && userDate[1] == '9')
strcpy(dateWord, "September");
if (userDate[0] == '1' && userDate[1] == '0')
strcpy(dateWord, "October");
if (userDate[0] == '1' && userDate[1] == '1')
strcpy(dateWord, "November");
if (userDate[0] == '1' && userDate[1] == '2')
strcpy(dateWord, "December");
printf("The date is:\n");
printf("%s %s, %s\n", dateWord, day, year);
}
我不知道为什么会这样╢ 正在打印。已经有用于日期解析和格式化的函数,
strtime
和strftime
。所以你可以使用它们。首先,使用strtime
将日期解析为struct tm
#include <time.h>
struct tm date;
strptime( userDate, "%m/%d/%Y", &date );
使用strftime的好处之一是它将尊重用户的区域设置,并以适当的语言提供月份。默认情况下,C不支持locale,您必须调用setlocale(LC\u ALL,”)代码>从
请注意,您的scanf
应限制为userDate缓冲区的大小,否则可能会溢出缓冲区<代码>%s
应始终有一个限制
scanf("%10s", userDate);
虽然有些编译器会接受
voidmain
,但它是非标准的。它应该始终是int main
已经有了日期解析和格式化功能,strtime
和strftime
。所以你可以使用它们。首先,使用strtime
将日期解析为struct tm
#include <time.h>
struct tm date;
strptime( userDate, "%m/%d/%Y", &date );
使用strftime的好处之一是它将尊重用户的区域设置,并以适当的语言提供月份。默认情况下,C不支持locale,您必须调用setlocale(LC\u ALL,”)代码>从
请注意,您的scanf
应限制为userDate缓冲区的大小,否则可能会溢出缓冲区<代码>%s
应始终有一个限制
scanf("%10s", userDate);
虽然有些编译器会接受
voidmain
,但它是非标准的。它应该始终是int main
char day[2]代码>->字符日[3]代码>然后第[2]天='\0'
。否则,您在day
中没有有效字符串。这一年也有同样的问题。哇,我觉得这个问题很愚蠢。。非常感谢你!习惯这种感觉——这不会是最后一次了。
:)
注意,你没有留下任何错误的余地。如果用户在某处键入空格,您将得到虚假输入。一般来说,最好给用户留下创造性的空间,并检查他们是否有创造性。(因此,char-userDate[11];
与scanf(“%s”,userDate);
而不是scanf(“%10s”,userDate);
在玩火-你会被烧死。你不检查你是否得到任何输入-你应该。char-day[2];
->char-day[3];
然后是day[2]='\0'
。否则您在日
中没有有效的字符串。年
也有同样的问题。哇,我觉得这个问题很愚蠢。非常感谢您!习惯这种感觉--这不会是最后一次:)
请注意,您没有留下任何错误余地。如果用户在某处键入空格,您将得到虚假输入。一般来说,最好给用户留下创造性的空间,并检查他们是否有创造性。(因此,char userDate[11];
与scanf(“%s”,userDate);
而不是scanf(“%10s”,userDate);
在玩火-你会被烧死。你不检查你是否得到任何输入-你应该这样做。
scanf("%10s", userDate);