如何在c中使用布尔函数

Rav*_*avi 4 c boolean

有人请告诉我,这段代码有什么问题

#include<stdio.h>
bool func(char *,int);
void main()
{
   char *a="Interview";
   if(func(a,9))
   {
      printf("True");
   }
   else
   {
      printf("False");
   }

}
bool func(char *s, int len)
{
   if(len < 2)
      return true;
   else
      return s[0] == s[len-1] && func(&s[1], len-2);
}
Run Code Online (Sandbox Code Playgroud)

我相信这个功能总会回来TRUE.这是一个面试问题.但是,当我尝试编译它时,它显示6个错误 ..

Mik*_*ike 12

我要去猜它不知道什么是booltrue是.bool在C中不是原始数据类型,您需要额外的包含:

#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)

问题的第二部分? Does it always return TRUE?

不是:当你进入这个功能时,你将跳过第一次返回,因为你的长度是9.所以相反,如果true只有:

return s[0] == s[len-1] && func(&s[1], len-2)
Run Code Online (Sandbox Code Playgroud)

是真的.你可以在这里跳过递归逻辑,因为它不是修改你的字符串,只看第一部分:

s[0]     // this has to be 'I'
==       // we need so what we compare against has to be 'I' as well
s[len-1] // This will be 'w'
Run Code Online (Sandbox Code Playgroud)

所以...那不会回归真实......谁关心ANDing(&&)的递归部分?我怀疑编译器甚至会优化它,因为这里的所有内容都是硬编码的.


md5*_*md5 6

您只需包含正确的标题即可。

#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用_Bool不需要任何包含的类型。bool只是该类型的别名。顺便说一句,别忘了用 C99 编译。