我创建此代码以了解我的输入是否是两个的倍数
#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;没有被认可
答案 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