2012-03-08 3 views
1

사용자가 날짜를 입력하게했습니다. '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); 
    } 

} 
+0

왜 루프가 없는가? if (strcmp (tempMonth, months [i]) == 0) return i;' – perreal

답변

3

대신 %d%02d 형식 문자열을 사용합니다.

+0

완벽하게 작동 함, 건배 – Mike

+1

참고 : 사용자는 첫 번째 scanf에 음수를 입력 할 수 있습니다. ('n'의 경우). 사용자가 255를 초과하여 입력하는 경우와 마찬가지로 코드가 올바르게 처리되는지 확인하십시오. – Mat