gpt4 book ai didi

arrays - 日期转换程序中的奇怪错误

转载 作者:行者123 更新时间:2023-12-05 09:26:24 24 4
gpt4 key购买 nike

我无法修复代码中的一个奇怪错误。

我编写了一个程序来打印最初以“MM/DD/YYYY”格式编写的日期格式化“月 DD,YYYY”。

程序很简单:我将日期存储在 char 数组中,然后使用 strtok 我分别获取月、日、年并存储指向它们的指针在 char * 数组中。最终将表示月份的字符串部分转换为int ,以便作为打印月份的索引;日和年分别打印。

该程序可以运行,但我真的无法理解如果我输入 08(八月)或 09(九月)作为月份它就不能运行这一事实。

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>

void read_date( char * const);
void collect_data( char * const, char *[] );
int convert_month( char * );

int main() {

char *months[12] = {"January", "February", "March", "April", "May", "June", "July","August", "September", "October", "November", "December" };
char orig_date[11];
char *date_elem[3];

int month;

read_date( orig_date );

collect_data( orig_date, date_elem );

month = convert_month( date_elem[0] );

puts("\n*New format*\n");
printf( "%s %s, %s\n", months[month - 1], date_elem[1], date_elem[2]);

}

void read_date( char * const date ) {

int i = 0;
char c;

puts("Enter date in format MM/DD/YYYY:\n");

while ( i < 11 && ( c = getchar() ) != '\n' ) {

date[i++] = c;
}

date[i] = '\0';
}

void collect_data( char * const date, char *elem[] ) {

char *ptr;
int i = 0;

ptr = strtok( date, "/" );

while ( ptr != NULL ) {

elem[i++] = ptr;
ptr = strtok( NULL, "/" );
}

}

int convert_month( char *m ) {

char *rem;

return strtol( m, &rem, 0);

}

最佳答案

您使用基数 0 来解析月份部分的整数:

return strtol( m, &rem, 0);

这意味着它将自动检测数字基数,它假设以零为前缀的输入数字以 8 进制(八进制)表示。您可能希望在那里对以 10 为基数的用法进行硬编码。

数字 0809 不存在八进制数表示法。您在那里收到 0,因为它在遇到第一个无效字符时停止解析。请参阅下面的链接,了解如何使用 strtol() 改进错误处理。

供引用:

关于arrays - 日期转换程序中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73983342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com