2013-03-17 7 views
0

다음은 함수입니다 (논리가 매우 분명하기를 바랍니다).관계형 문이 참인지 거짓인지를 확인하는 함수 작성하기

x는 '<'또는 '>'연산자 중 하나이고 a와 b는 용어입니다.

int rationalCheck(x, a, b){ 

    if (x == '<' && a < b && b < a){ 
     printf("a is less than b\n"); 
    } 

    if (x != '>' && a > b && b > a){ 
     printf(" a is greater than b\n"); 
    } 

    return 0; 
} 

기능에 입력은

(4 < 4) > (3 > 3) 

이이가 평가하는 것

(4 < 6) > (2 > 1) 

(4 < 4) > (3 > 3) is false 

또는 기능에 입력을 평가하는 것이 될 것이다

(4 < 6) > (2 > 1) is true 
+1

무엇이 문제입니까? – atk

+0

* C * 또는 * C++ *에'false

+1

'a b && b>는 거짓입니다 – Musa

답변

1

C에서 연산자/연산을 함수로 전달할 수 없습니다. 하스켈을 고려해 보시기 바랍니다.

#include <stdio.h> 

#define assert(cond) if (!(cond) && printf("Assertion failed: " # cond " at " __FILE__ ":%d\n", __LINE__) != 0) abort() 

int main(void) { 
    assert(1 > 1); 
} 

이 아마도 당신이 뭔가를 원하는 :

또는, 매크로- 패스 작업은, 그래서 이것은 매크로, 같은 assert 매크로되는 무언가 따라서 정의로 구현 될 수있다 :

#include <stdio.h> 

#define rational_check(cond) printf(# cond " is %s\n", (cond) == 0 ? "false" : "true") 

int main(void) { 
    rational_check((4 > 4) > (3 > 3)); 
    rational_check((4 < 6) > (2 > 1)); // (4 < 6) > (2 > 1) is 1 > 1, by the way... false 
} 

그러나 사용자의 요구 사항에 맞는지 여부는 확실하지 않습니다. 함수 포인터는 rational_check에서 파생 될 수 없으며 런타임 중에 형성된 표현식을 나타내는 문자열과 작동 할 수 없습니다. 필요로하는 사용 사례에 대해 번역기를 작성해야합니다. 그렇지 않으면 적합해야합니다.

-1

나를 위해 작동합니다. 나는 그것을 생각하고 있었다.

int rationalCheck(x, a, b){ 


if (x == '<') 
{ 
    if (a >= b) 
    { 
     return 99; 
    } 

    if (b <= a) { 
     return 99; 
    } 
} 

if (x == '>') 
{ 
    if (a <= b) 
    { 
     return 99; 

    } 
    if (b >= a) 
    { 
     return 99; 
    } 

} 


return 1; 
} 

누구나 입력 해 주셔서 감사합니다.

+0

C89에서 최소한 작성하는 법을 배우십시오. 그 매개 변수에 대한 유형이 전혀 없다는 것은 소름이 끼쳐 있습니다. 그러한 코드는 업계에서 받아 들일 수 없을 것입니다. 원래의 C 표준이 출판되기 전에는 거의 용인 될 수 없었고, 현대 C에서는 받아 들일 수없는 것이 확실합니다. –

+0

어떤 상황에서 너의 두 번째 생각해라. nd'return 99;'가 실행됩니까? 내가 생각할 수있는 것이 하나도 없다! 네 번째와 비슷합니다. –

+0

@JonathanLeffler 여기에서 배우기를 원합니다. 코드 예제를 통해 피드백을 제공 할 수 있습니까? – user1787331