首页 > 解决方案 > 如何在不存储到变量中的情况下针对多个值测试函数的返回值

问题描述

我怎么能做到这样的事情......

int main(void)
{
  if (f(x) == (a || b))
  {
     puts("Success");
  }
  return (0);
}

如果 f(x) 的返回等于 a 或 b,这将打印 Success。我知道可以将它存储在一个变量中,但我的问题是:“这样的事情可以通过只调用一次 f(x) 函数而不使用变量来完成吗?”

编辑 1:我不允许为此分配使用 switch 语句

编辑 2:我可以设置一个只有这样一个表达式的范围吗?

if ( 2 < f(x) < 5)

这是否有效(返回类型为 int)?

标签: cconditional-statements

解决方案


如何测试一次调用的函数的多个返回值而不存储到变量中(?)

不是真的,但有一些限制让我们滥用 C 并假设a, bf()返回一个字符。

1形成一个由 和 组成的字符数组,ab使用 搜索它memchr()。受@David C. Rankin启发 (它不会将结果存储f()在变量中,但会调用函数)

int main(void) {
  //         v-------------v compound literal
  if (memchr((char [2]){a,b}, f(x), 2)) {
     puts("Success");
  } 
  return 0;
}

我看到 OP 添加了“返回类型是 int” - 哦,好吧。


if ( 2 < f(x) < 5)是有效代码,但不符合 OP 的要求。

就像if ( (2 < f(x)) < 5)whichf(x)与 2 比较,结果是 0 或 1,总是小于 5。


今晚人潮汹涌,那么下面呢。需要一些用于int溢出的扩展数学,但很接近。

abs(2*f(x) - (a+b)) == abs(a-b)

1对生产代码不认真的代码建议 - 使用临时代码。


推荐阅读