#include<stdio.h>
int main(void)
{
int Kor,Eng,Math,Sc;
int avg=0,sum=0;
scanf("%d %d %d %d",&Kor,&Eng,&Math,&Sc);
if(Kor<0||Kor>100&&Eng<0||Eng>100&&Math<0||Math>100&&Sc<0||Sc>100)
{
printf("잘못된 점수\n");
}
else
{
sum=Kor+Eng+Math+Sc;
avg=sum/4;
if(avg>=85)
{
printf("합격");
}
else printf("불합격");
}
}
https://glot.io/snippets/fanq95puff
잘못된 점수라고 출력이 안 됩니다. Input 탭의 입력 값으로 테스트해보세요.
Unit 18.8을 크게 벗어나지 않습니다. 해설에서는 &&로 작성하는 방법과 ||로 작성하는 방법이 설명되어 있습니다.
값이 범위 안에 있는가로 판단할 것인가
값이 범위 밖에 있는가로 판단할 것인가
Unit 18.8의 예제처럼 값이 범위 안에 있는가로 판단하는 것을 추천합니다.
간단히 이렇게 줄인 것으로만 보면
Math<0||Math>100&&Sc<0||Sc>100
&&의 우선순위가 ||보다 높습니다. 연산자 우선순위는 Unit 25에 설명되어 있습니다.
Math에 80이 입력되어 있고, Sc에 -3이 입력되어 있으면
Math < 0 : False
Math > 100 : False
Sc < 0 : True
Sc > 100 : False
&&이 우선순위가 높으므로 Math > 100 && Sc < 0이 먼저 실행됩니다.
False && True이므로 결과는 False입니다. 따라서
False || False || False이므로 ||를 해도 결과는 False이고 해당 if문에 실행되는 경우는 발생하지 않습니다.
해설에 제시된 조건식을 다시 살펴보세요. 문의한 방식으로는 해설되어 있지 않습니다.