회신: 18.9 심사문제 해설 부분에 오타인것 같습니다
, 도장_ 관리자님이 작성심사 문제 해설을 수정했습니다.
해당 판단에서 등호를 작성하는 방식은 두 가지가 있습니다.
1번 -> korean < 0 || korean > 100
이 경우엔 하나만 범위를 벗어나도 true가 되므로 ||로 작성하는 게 맞습니다.
2번 -> korean >= 0 && korean <= 100
이 경우엔 하나만 범위를 벗어나도 false가 되므로 &&로 작성하는 게 맞습니다.
심사 문제 해설은 1번으로 가정하고 작성되었으나 독자가 2번으로 작성했을 때는 오류로 여겨질 수 있음을 알았습니다.
그래서 해설은 다음과 같이 수정했습니다.
scanf로 변수 네 개에 점수를 저장합니다(이하 변수는 korean, english, mathematics, science). 먼저 점수는 0점부터 100점까지만 입력받을 수 있다고 했으므로 if 조건문을 사용하여 korean >= 0 && korean <= 100 && english >= 0 && english <= 100 && mathematics >= 0 && mathematics <= 100 && science >= 0 && science <= 100과 같이 모든 점수가 0점 이상이거나 100점 이하인지 검사해야 합니다. 특히 하나라도 범위를 벗어나면 안되므로 모두 && 연산자로 판단합니다. 점수가 범위 안에 있으면 if 부분에서 합격 불합격 여부를 판단하고, 점수가 범위를 벗어나면 else 부분에서 printf로 "잘못된 점수"를 출력합니다(if의 중괄호 안에 합격, 불합격을 판단하는 if, else가 들어감).
합격, 불합격 여부는 국어, 영어, 수학, 과학 점수의 평균이 85점 이상이라야 합격이므로 (korean + english + mathematics + science) / 4 >= 85와 같이 조건식 안에서 평균을 구하고 85점 이상인지 검사합니다. 그리고 if 부분에는 printf로 "합격"을 출력하고, else 부분에는 "불합격"을 출력하면 됩니다.
이처럼 프로그램을 만들 때는 입력 값의 범위를 항상 확인하는 것이 좋습니다. 범위를 벗어난 입력 값으로 인해 완전히 잘못된 값이 나올 수 있고, 상당수의 보안 취약점이 입력 값의 범위를 검사하지 않아서 발생하게 됩니다.
제안에 감사드립니다.
회신: 18.9 심사문제 해설 부분에 오타인것 같습니다
, 이 상영님이 작성답변 주신것처럼
min < x < max 로 할떄와
min>x, max<x 로 할때 두개의 경우에 따라 다르겠네요
그 방향으론 생각을 못했었네요.
감사합니다.