2017-12-21 13 views
2

내 코드에 문제가 있습니다. 항상 (userDigit < = 6 & & userDigit> = 1) 을 무시합니다. 누군가가 나에게 무엇이 잘못되었는지 말해 줄 수 있습니까?getch() 이후에 프로그램은 1-6을 넣은 후에도이를 무시합니다.

 for(i=0; i<4; i++) 
     { 
      userDigit=getch(); 
      putch(userDigit); 

      if(userDigit<=6 && userDigit>=1) 
      { 
       //code    
      } 
      else 
      { 
       correct=0; 
      }      
     } 

     if(correct == 0) 
     { 
      printf("wrong"); 
      correct++; 
     } 
+5

'getch'는 숫자가 아닌 문자를 반환합니다. 문자가 아닌 숫자와 비교하십시오. –

+4

문자는 '6', 숫자는 6입니다. – stark

답변

1

getch()는 입력 문자가 아닌 숫자 자체의 인코딩 값을 나타내는 int을 반환한다.

다행히 C 표준은

userDigit = getch() - '0'; 

이 자리의 실제 숫자 값으로 변환에 쓸 수 있도록 허용합니다. 모든 비 숫자 입력은 범위 (0 - 9)를 벗어납니다. 당연히 그

당신의 putch 기능 (조잡 당신이 '0'을 추가하여 다시 변환 수)를 중단합니다 (의심의 소지를 없애기 위해 '0' C.에 int 타입),하지만 난 디버깅을 위해 당신이 그것을 가지고 의심하고 당신이 할 수있는 안전하게 제거하십시오.

+1

코드가 컴파일되지 않습니다 ... -1 –

+0

커피가 필요합니까? – Bathsheba

+0

네, 조금 :) 수정 된 구문 오류 –

1

변경

if(userDigit<=6 && userDigit>=1) 

때문에 '0', '1', ... 기호 결과적 ASCII 코드를 가지고있는 비교가 유효하므로 작동

if(userDigit<='6' && userDigit>='1') 

합니다.

+0

설명해주세요. –

+0

설명은 이미 밧세바의 대답에서 이루어졌습니다. '0', '1', ... 기호는 결과 코드가 있으므로 비교는 유효합니다 –

+0

그렇다면 대답을 제거 할 수 있습니다 (질문에 '이미 답변 됨'이므로) –