본문 바로가기

프로그래밍/C++

[C++] 삼항연산자를 중첩해서 쓸 때 주의할 점

반응형

가령, 정수형 변수 A, B, C, D 중 최솟값을 출력하려는 경우 코드를 다음과 같이 작성할 수 있다.

#include <stdio.h>

 using namespace std;
 
 int main() {
 	int A, B, C, D;
	scanf("%d %d %d %d", &A, &B, &C, &D);
	int min = A < B ? A : B;
	min = C < min ? C : (D < min ? D : min);
	printf("%d", min);
	return 0;
 }

얼핏보면 문제가 없어 보인다. 하지만 문제는 다음 코드에 있다.

    min = C < min ? C : (D < min ? D : min);

D < C < min인 경우 위 코드의 결과는 아이러니하게도 C가 된다.

왜냐하면 C와 D의 비교가 이루어지지 않기 때문이다.

이러한 문제점을 해결하려면 삼항연산자를 다음과 같이 써야된다.

#include <stdio.h>

using namespace std;

int main() {
	int A, B, C, D;
	scanf("%d %d %d %d", &A, &B, &C, &D);
	int min = A < B ? A : B;
	min = C < min ? (C < D ? C : (D < min ? D : min)) : (D < min ? D : min);
	printf("%d", min);
	return 0;
}

삼항연산자를 중첩할 바에야 차라리 if-else를 쓰는 편이 낫다는 생각이 든다.

반응형