用三元运算符返回布尔值

时间:2017-08-23 10:13:39

标签: c

我创建此代码以了解我的输入是否是两个的倍数

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

bool    main(int ac, char **av)
{
  if (ac == 2)
  {
      int nb = atoi(av[1]);
      (((nb / 2) * 2) != nb) ? false : true; 
  }
}

但是gcc正在回复我:

test.c:5:1: error: unknown type name ‘bool’
bool main(int ac, char **av)
^
test.c: In function ‘main’:
test.c:10:32: error: ‘false’ undeclared (first use in this function)
   (((nb / 2) * 2) != nb) ? false : true;
                            ^
test.c:10:32: note: each undeclared identifier is reported only once for each function it appears in
test.c:10:40: error: ‘true’ undeclared (first use in this function)
   (((nb / 2) * 2) != nb) ? false : true;

我在 Ubuntu bash for Windows 下(我现在无法访问任何Linux)

我不明白为什么我不能将 bool 类型用于我的功能,或者为什么&#39; false &#39;和&#39; true &#39;没有被认可

2 个答案:

答案 0 :(得分:4)

您的代码中存在许多问题。

首先,您错过了return关键字:

return (((nb / 2) * 2) != nb) ? false : true;
^^^^^^

除此之外,你不需要三元运算符,因为第一部分都准备好了bool。所以简单地做:

return (((nb / 2) * 2) == nb);
^^^^^^                 ^^

return不等于2时,您在代码中没有ac声明。

此外,您应该stdbool.h加入bool

最后,main函数必须返回int - 而不是bool

重写代码可能是:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdbool.h>   // Include this to use bool

bool foo(int ac, char **av)
{
  if (ac == 2)
  {
      int nb = atoi(av[1]);
      return (((nb / 2) * 2) == nb); 
  }

  return false;
}

int main(int ac, char **av)
{
    if (foo(ac, av))
    {
        printf("foo returned true\n");
    }
    else
    {
        printf("foo returned false\n");
    }

    return 0;
}

答案 1 :(得分:0)

嗯,首先我要说的是,而不是这个,

(((nb / 2) * 2) != nb) ? false : true; 

你可以随时使用

!(((nb / 2) * 2) != nb)

(ofc == nb也会做到这一点)

如果编译器没有识别真假,那么你的代码很可能会遇到一些问题,也许你已经破坏了语法,或者编译器变得疯狂,它会引发这种错误。不要看任何其他的reaso