这是函数(我希望逻辑非常明显)。
设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
答案 0 :(得分: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 :(得分:-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;
}
感谢大家的投入。