我正在尝试编写一个程序,它可以输入DD/MM/YYYY格式的日期,并将格式更改为DD-MM-YYYY,而不使用C中的字符串函数。
#include <stdio.h>
typedef struct {
char day[3];
char month[3];
char year[5];
} date;
int main(){
char input[11];
date DATE ;
DATE.day[3] = '\0';
DATE.month[3] = '\0';
DATE.year[5] = '\0';
printf("%s\n", DATE.day);
int i = 0;
// saisie de date
printf("enter date in the format DD/MM/YYYY\n");
scanf("%s", &input);
//fill in
// fill in day
for (int j = 0; j<2; j++){
DATE.day[j] = input[i];
i++;
}
i++;
// fill in month
for (int j = 0; j<2; j++){
DATE.month[j] = input[i];
i++;
}
i++;
// fill in year
for (int j = 0; j<4; j++){
DATE.year[j] = input[i];
i++;
}
printf("%s-%s-%s", DATE.day,DATE.month,DATE.year);
return 0;
}
我想这个问题与我初始化字符串的方式有关,但是它仍然不起作用。
1条答案
按热度按时间anhgbhbe1#
我的猜测是,如果你设置了编译器警告,你就会收到警告,告诉你程序设置的数组值超出了界限。记住,对于任何一个被设置为特定大小的数组(例如“3”),数组的最大索引值是大小值减1(例如“2”)。
这样,我重构了代码,如下面的清单所示。
注意索引值中的更正。另外,仅供参考,当使用scanf并输入字符数组(例如字符串)时,变量名不包括与号。数组的名称引用指向数组的指针。
做了这些调整之后,下面是终端的一些示例输出。
尝试这些修正,看看它是否符合你的项目的精神。