본문 바로가기

문제풀이/C 문제풀이

2920 + getchar + 배열 비교

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");
}

결과

.2920_1png .2920_2png .2920_3png

글자를 차례대로 받되 숫자일 경우에만 배열에 저장하여 배열과 미리 주어진 값과 비교시키고자 하였다.

+) getchar()은 아스키코드 값으로 입력 받는다(참고)

+) 배열을 비교하고 싶을 때, 비교 연산자를 사용하면 주소값을 비교하게 된다. 따라서 strcmp 함수를 사용하여야 한다.(참고)

+) strcmp 함수를 사용하여 비교하였을 때 두 문자열이 같을 경우에도 mixed가 출력된다. 이는 inp[7]과 as[7]까지는 동일하지만 inp[8]은 정의되지 않았고 as[8]은 null이기 때문에 strcmp 함수가 둘은 다른 문자열이라고 판단하였기 때문이다. 따라서 strncmp함수를 사용하여 일정 개수만 비교하였다

'문제풀이 > C 문제풀이' 카테고리의 다른 글

2750  (0) 2019.03.01
10039  (0) 2019.02.28
8958 + sizeof/strlen +char/int형 선언  (0) 2019.02.28
2577  (0) 2019.02.24
1152  (0) 2019.02.24