C 언어 문제 뭐가 틀린지 잘 모르겠습니다.


The purpose of the following program is to check input. It is only supposed to accept a value between 0 and 20, and it should continually ask for input until the correct numbers are entered. However, there is a bug in it.

include

define TRUE 1

define FALSE 0

int main(void) { int correct, inputint;

inputint = -1;
correct = FALSE;
while (!correct) {
    if (0 < inputint < 20) {
        printf("Thank you.\n");
        correct = TRUE;
    } else {
        printf("Enter an integer ");
        printf("between 0 and 20:  ");
        scanf("%d", &inputint);
    }
}
return 0;

}

a. Fix the bug so that the program behaves as stated above.

영어책에 있는 문제인데요. 숫자적는게 먼저 나오고 그걸로 판별 하는건 알겠는데 그걸 나오게 하려면 어떻게 해야할지 모르겠습니다. 현재 출력은 그냥 thank you 가 나옵니다.

  • 2018년 01월 10일에 작성됨

  • if(0 < inputint && inputint < 20) 로 수정하면 될거같아요    이예진   2018.1.10 18:33     
조회수 89


2 답변


좋아요
0
싫어요
채택취소하기

짐작으로는... if ( 0 < what < 20 ) 이 조건문이 버그인 것 같군요

저렇게 적으면 인간이 직관적으로 생각하는 것처럼 'what 이 0 과 20 사이의 값인지' 확인하는게 아니라 앞의 비교연산자를 먼저 수행하고, 그 결과를 가지고 뒤의 비교연산자를 수행하게 될 것 같네요.

먼저 0 < what 을 비교, 0 < -1 이니까 False 이므로 0, 그리고 0 < 20 을 비교, 이건 당연히 True 가 됩니다.

그래서 아래 else문으로 들어가지 않고 바로 Thank You 문장을 출력하는 겁니다.

  • 2018년 01월 10일에 작성됨

  • 감사합니다!!    문관   2018.1.11 03:18     

if((0 < inputint) || (inputint < 20)) 로 수정하셔야 할 것 같아요.

  • 2018년 01월 11일에 작성됨
    내가 아는 것을 널리 알리고 싶습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close