2014-01-09 2 views
0

일부 사용자 입력의 유효성을 검사하고 해당 입력을 기반으로 다른 결과를 출력해야하는 클래스에 과제가 있습니다. 아주 기본적인 것들이지만, 저는 C에서 아주 새로운 것입니다. 그래서 이것이 제가 시작하는 곳입니다. 내가 바른 길에,하지만 상관없이 무엇 정수 I 입력의 생각, 터미널 인쇄 여기 Good job! 내 코드입니다 :C 조건문의 쓸데없는 출력

printf("How tall should the pyramid be?\n"); 
int n = GetInt(); 
if (3 <= n < 23) 
{ 
    printf("Good job!\n"); 
} 
else if (0 < n <= 3) 
{ 
    printf("Well, that's not very impressive is it?\n"); 
} 
else 
{ 
    printf("Please enter a valid number between 1 and 23.\n"); 
} 

이제

C, 나는 C 제로 경험을 가지고 있지만, 좀 파이썬을 알고 내가 위의 코드를 번역한다면, 그것은 예상대로 작동합니다

파이썬

n = input("Enter Number") 
if (3 <= n < 23): 
    print("Good job!\n") 
elif (0 < n <= 3): 
    print("Well, that's not very impressive is it?\n") 
else: 
    print("Please enter a valid number between 1 and 23.\n") 

이 구조체가 C가 아닌 파이썬에서 작동하는 이유는 무엇입니까? C 코드가 올바른 문자열을 인쇄하도록 변경해야하는 항목은 무엇입니까?

+0

@JonathanLeffler를 작성해야 원하는 것을 달성하기 위해. 중복에 대한 사과, 나는 내 탐색에서 너무 모호했다. –

+1

그걸 찾기가 어려울거야. –

답변

4

3 <= n < 23는 당신이 그것을 C. 첫 번째에서와 생각하는 방법을 작동하지 않습니다, n3와 비교, 다음 1 경우 true 또는 0 false의 경우는 산출 정수로 캐스팅. 그런 다음 0 (또는 1)을 23과 비교하면 항상 참값이됩니다 (둘 다 23보다 작음).

3 <= n && n < 23으로 다시 작성하십시오. 다른 테스트에도 동일하게 적용됩니다.

+0

아! 그건 의미가 있습니다. 세 가지 대답은 모두 같지만 처음에는 거기서 엿 먹어서 10 분이 지나면 대답을 수락합니다. 고맙습니다! –

4
3 <= n < 23 

당신이
그것은 할 것입니다 않습니다 생각하지 않는다 (3 < = N) (0 또는 1 진리 값 아마도?) 뭔가 평가 한 후 23

에 저것을 비교합니다 마찬가지로 0 < n <= 3는 C에서 0 < n && n <= 3

1

,이됩니다 당신은

3 <= n && n < 23 

을 원하는은 true 또는 false으로 평가됩니다. 숫자의 범위를 검사하는 조건이 아닙니다 (Python과 다름).

if (3 <= n < 23) 

if (3 <= n && n < 23) 

else if (0 < n <= 3) 

else if (0 < n && n <= 3) 
0

3 < = N < 23로 변경하면 (3 < = N)쓰는 것과 동일23. 첫 번째 부분은 true 인 경우 1을 반환하고 false 인 경우 0을 반환하여 비교를 0 < 23 또는 1 < 23으로 바꾸고 항상 true를 반환합니다.위해

당신이 나는 이것이 일반적인 문제가되고에 대한 귀하의 지점을 볼 수있는 3 < = N & & N < 23