2013-03-17 49 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

相关问题