2920
2920번 문제#include
#include // strrev, strcmp
#include // isdigit
int main(void) {
int i = 0, c; // i : 입력 받을 배열의 인덱스, c : 입력받을 문자
char inp[8]; // 입력 받을 배열
char as[9] = { '1', '2', '3', '4', '5', '6', '7', '8'}; // 비교 대상 문자열
while (1) {
if (isdigit(c = getchar())) // 입력 받은 문자가 숫자일 경우
inp[i++] = c; // 배열에 추가한다
if (i == 8) // 8번 입력 받으면
break; // while문을 종료한다
}
if (!strncmp(inp, as, 8)) // inp와 as 배열이 8번째까지 동일할 경우
printf("ascending");
else if (!strncmp(inp, strrev(as), 8)) // inp와 as를 뒤집은 배열이 8번째까지 동일할 경우
printf("descending");
else
printf("mixed");
}
결과
글자를 차례대로 받되 숫자일 경우에만 배열에 저장하여 배열과 미리 주어진 값과 비교시키고자 하였다.
+) getchar()은 아스키코드 값으로 입력 받는다(참고)
+) 배열을 비교하고 싶을 때, 비교 연산자를 사용하면 주소값을 비교하게 된다. 따라서 strcmp 함수를 사용하여야 한다.(참고)
+) strcmp 함수를 사용하여 비교하였을 때 두 문자열이 같을 경우에도 mixed가 출력된다. 이는 inp[7]과 as[7]까지는 동일하지만 inp[8]은 정의되지 않았고 as[8]은 null이기 때문에 strcmp 함수가 둘은 다른 문자열이라고 판단하였기 때문이다. 따라서 strncmp함수를 사용하여 일정 개수만 비교하였다