[Baekjoon C언어] 9488번 시험성적 / 항상 A를 출력하는 이유


#include <stdio.h>

int main(){
	int a;
	scanf("%d", &a);
	
	if (90 <= a <= 100) printf("A");
	else if (80 <= a <= 89) printf("B");
	else if (70 <= a <= 79) printf("C");
	else if (60 <= a <= 69) printf("D");
	else printf("F");
	
}

다음과 같이 작성하면 항상 A가 출력됩니다. 인간의 논리대로라면 제대로 실행이 되어야하는데 이상합니다.

이것은 C언어 연산자의 연산방향과 관계가 있습니다..

 

C언어에서 <=, =>, >, < 연산자의 경우에는 연산순서가 왼쪽에서 오른쪽인데

90 <= a <= 100 를 컴파일러는 (90 <= a )<= 100 이렇게 해석하게되구요.

(90 <= a ) 이것이 참이라면 1이 되고 거짓이라면 0 이 됩니다

 

1이던 0 이던 1<=100, 0<= 100 이기 때문에 무조건 참이되어서 A만 출력되는 것입니다.

 

 

#include <stdio.h>

int main(){
	int a;
	scanf("%d", &a);
	
	if (90 <= a && a <= 100) printf("A");
	else if (80 <= a && a<= 89) printf("B");
	else if (70 <= a && a <= 79) printf("C");
	else if (60 <= a && a <= 69) printf("D");
	else printf("F");
	
}

그렇기 때문에 이렇게 하고싶으시면 &&(And) 연산자를 이용하시면 됩니다.

 

관련 : https://pgh268400.tistory.com/23?category=1072473

 

[C언어 강좌] #6 연산자(Operator) - 1

안녕하세요 파일입니다. 오늘 알아볼 것은 연산자입니다. #include int main(){ char c = 'A'; printf("c의 논리적 주소 : &c, c의 물리적 주소, %x", &c); return 0; } c의 논리적 주소 : &c, c의 물리..

pgh268400.tistory.com

관계연산자 항목

COMMENT WRITE