사용자가 날짜를 입력하게했습니다. '1 월 10 일 12 일'은 월, 일 및 연도를 나타냅니다. 월이 두 자리 숫자라면 잘 작동하지만, 사용자가 'January 12 01'또는 그 앞에 0이있는 숫자를 입력하면 난이도가 01 또는 '1 월 12 일이면'1 월 12 일 '이됩니다. '그 달이 내가 입력 한 것 대신에 00이라면. 어떤 형식의 형식이 잘못 되었습니까? 당신이 앞에 제로와 항상 출력 적어도 두 자리를 원하는 경우정수 인쇄
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int (*compfn)(const void*, const void*);
struct date
{
int month;
int day; //The day of the month (e.g. 18)
int year; //The year of the date
};
char* months[]= {
"January", "February",
"March", "April",
"May", "June",
"July", "August",
"September", "October",
"November", "December"};
int getMonth(char tempMonth[])
{
if(strcmp(tempMonth, months[0]) == 0) return 0;
if(strcmp(tempMonth, months[1]) == 0) return 1;
if(strcmp(tempMonth, months[2]) == 0) return 2;
if(strcmp(tempMonth, months[3]) == 0) return 3;
if(strcmp(tempMonth, months[4]) == 0) return 4;
if(strcmp(tempMonth, months[5]) == 0) return 5;
if(strcmp(tempMonth, months[6]) == 0) return 6;
if(strcmp(tempMonth, months[7]) == 0) return 7;
if(strcmp(tempMonth, months[8]) == 0) return 8;
if(strcmp(tempMonth, months[9]) == 0) return 9;
if(strcmp(tempMonth, months[10]) == 0) return 10;
if(strcmp(tempMonth, months[11]) == 0) return 11;
}
int sortDates(struct date *elem1, struct date *elem2)
{
if (elem1->year < elem2->year)
return -1;
else if (elem1->year > elem2->year)
return 1;
/* here you are sure the years are equal, so go on comparing the months */
if (elem1->month < elem2->month)
return -1;
else if (elem1->month > elem2->month)
return 1;
/* here you are sure the months are equal, so go on comparing the days */
if (elem1->day < elem2->day)
return -1;
else if (elem1->day > elem2->day)
return 1;
else
return 0;
}
main()
{
int n;
int i;
char tempMonth[255]; //Used to store the month until checked
scanf("%d", &n);
struct date *list;
list = (struct date *)malloc((n * sizeof(struct date)));
for(i = 0; i < n; i++)
{
scanf("%s %d %d", tempMonth, &list[i].day, &list[i].year);
list[i].month = getMonth(tempMonth);
}
qsort(list, n, sizeof(struct date), (compfn)sortDates);
for(i = 0; i < n; i++)
{
printf("%s %d %d\n", months[list[i].month], list[i].day, list[i].year);
}
}
왜 루프가 없는가? if (strcmp (tempMonth, months [i]) == 0) return i;' – perreal