2013-03-17 12 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 < 4) > (3 > 3) is false 

或者輸入功能將

(4 < 6) > (2 > 1) 

這將評估爲

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

你覺得你的問題是什麼? – atk 2013-03-17 02:04:21

+0

請注意,在* C *或* C++ *中,您有'false 2013-03-17 02:05:03

+1

a b && b> a'爲假 – Musa 2013-03-17 02:08:31

回答

1

您不能將操作符/操作傳遞給C函數。我建議考慮Haskell。

或者,你可以通業務,所以這可以被實現爲宏的assert宏是類似於因此定義:

#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); 
} 

也許你想是這樣的:

#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中它是不可接受的。 – 2013-03-17 02:47:51

+0

在什麼情況下認爲你的seco nd'return 99;'會被執行?沒有我能想到的!與第四個類似。 – 2013-03-17 02:49:33

+0

@JonathanLeffler願意在這裏學習。你能提供代碼示例的反饋嗎? – user1787331 2013-03-17 03:08:50

相關問題