반응형
가령, 정수형 변수 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를 쓰는 편이 낫다는 생각이 든다.
반응형
'프로그래밍 > C++' 카테고리의 다른 글
Visual Studio에 OpenGL 설치하기 (1) | 2020.11.14 |
---|---|
[C++] 새로 알게 된 사실 몇 가지 (계속추가예정) (0) | 2020.10.22 |
[C] 백준 풀 때 Tip. 답안 검토 시 파일로 입력 넣기 (0) | 2020.09.26 |
[C++] 비주얼스튜디오(VS)에서 발생하는 scanf 오류 해결하기 (0) | 2020.09.22 |
[C++] HEAP_CORRUPTION_DETECTED (0) | 2020.09.05 |