8자리 숫자를 입력 받으면 (MMDDYYYY) 그에 따른 년도, 월, 일을 출력하는 것이다.
ex) 05221980 >> 22nd May 1980
그런데 만약 날짜가 1,21,31일이면 앞에 "st"를 붙이고, 2,22일이면 "nd"를 붙이고, 3, 23일이면 "rd"를 붙여서 날짜를 표시해야 한다. (나머지 날짜는 "th"붙이기)
출력 예시
Enter a date in numerical form(MMDDYYYY): 05051980
The date you entered is: 5th May 1980
End of program
#include <stdio.h>
int main(void) {
int m, d, y;
printf("Enter a date in numerical form(MMDDYYYY): ");
scanf("%02d%02d%04d", &m, &d, &y);
switch (d)
{
case 1:
printf("1st ");
break;
case 21:
printf("21st ");
break;
case 31:
printf("31st ");
break;
case 2:
printf("2nd ");
break;
case 22:
printf("22nd ");
break;
case 3:
printf("3rd ");
break;
case 23:
printf("23rd ");
break;
default:
printf("%dth ", d);
break;
}
switch (m)
{
case 1:
printf("January ");
break;
case 2:
printf("Fabruary ");
break;
case 3:
printf("March ");
break;
case 4:
printf("April ");
break;
case 5:
printf("May ");
break;
case 6:
printf("June ");
break;
case 7:
printf("July ");
break;
case 8:
printf("August ");
break;
case 9:
printf("September ");
break;
case 10:
printf("October ");
break;
case 11:
printf("November ");
break;
case 12:
printf("December ");
break;
}
printf("%d\n", y);
printf("End of program");
return 0;
}
저는 'switch문'을 사용하여 월과 일에 해당하는 값을 계산하게끔 하였습니다.
-switch문을 쓸 때 주의할 점
case이름을 적을 때, 01,02로 입력하면, '8진수'로 적용이 되어, case 08부터 에러가 난다.
([Error] invalid digit "8" in octal constant)
그렇기 때문에 꼭! case 1, case2, ... 로 사용할 것!
scanf("%02d%02d%04d", &m, &d, &y); m,d,y가 각각 2개, 2개, 4개의 숫자를 받게 해줌.
-간단한 문제였지만, case 입력 시 주의할 점과, 숫자들을 몇 개씩 어떻게 받는 지 알아야 해결할 수 있음