c - 使用 bool 表达式代替 if/else 或类似条件

标签 c boolean-expression

我需要使用 bool 表达式而不是使用诸如:c: b? A、switch、else……如果。并且使用 for/while-do/while as if 也是不允许的。

我的问题是当收到一个名字时,我们会根据它的值(value)来决定打印什么。例如,如果名字短于 6 个字母,我们打印“玩家 A 已发送”,如果字母总和(以 ascii 值表示)大于 20,我们将发送玩家 B 和类似的东西。另外,如果我们可以发送多个播放器,我们会选择发送最大的字典序播放器(playerC < playerB < playerA.)

我想做的是这样的

  bool sum = AsciiSum(name)>=20;
  bool len = NameLength(name)<6;
...

所以剩下的应该是那个

if(sum) 
  printf("%c\n" ,'playerA');
else if (len) 
  printf("%c\n" ,'playerB');
else 
  printf("%c\n" ,'no player was sent');

但正如我所说,我不能使用 if 和 else 或类似条件。对于最后一部分的任何帮助,我们将不胜感激。

最佳答案

这样做的一种方法是通过返回 bool 值的自定义打印函数重新路由您的输入。也就是说,您可以只使用 AND (&&) 运算符来调用它。

示例代码:

bool printMessage(char* string)
{
    printf("%s", string);
    return true;
}

bool sum = AsciiSum(name)>=20 && printMessage("playerA");
bool len = NameLength(name)<6 && printMessage("playerB");
// ... etc

为什么会这样?如果第一个条件为真,AND 运算符将只允许检查下一个条件。由于您的条件是 sum 必须为真才能打印消息,因此这是一种调用方法进行打印而无需直接使用任何 if/else 语句的方法

编辑:一个更好的方法,如 Johnny Mopp 所建议的那样是使用 stdio puts(),它返回一个整数(这就是 bool 值的功能)。

bool sum = AsciiSum(name)>=20 && puts("playerA");
bool len = NameLength(name)<6 && puts("playerB");

有了这个,您甚至不必创建 printMessage 函数,尽管您应该继续使用感觉更舒服的那个。

关于c - 使用 bool 表达式代替 if/else 或类似条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55619597/

相关文章:

c++ - 链接错误 c 和 c++( undefined reference )

c - 如何在 R 中查看通过 .Call() 调用的 C 代码的调用堆栈

c - GNU backtrace_symbols() 和 dladdr() 是线程安全的吗?

c - 编写我自己的 shell,未声明的标识符 "output"

Python:函数参数的多个可能值

java - SonarQube - boolean 逻辑正确性 -

javascript - 反转 bool 表达式

java - 这是什么意思!(x == 1)

python - Python 中的基本 bool 表达式产生令人惊讶的结果

c - printf中的两个动态参数