为什么返回0或1而不是True或False

时间:2018-11-21 15:11:32

标签: c

#include <stdio.h>
#include <stdbool.h>
typedef enum{
    False,
    True
}Bool;
int main(int argc, char const *argv[])
{
    int a = 1, d = 1;
    Bool b = False, c = True;
    Bool ans;
    if (a == d)
    {
        ans = c;

    }
    else
    {
        ans = b;
    }
    printf("The answer is: %i \n", ans);
    return 0;
}

我认为它只返回执行结果0或1。 我希望它从我创建的枚举中返回值。

3 个答案:

答案 0 :(得分:3)

如果您希望它打印字符串truefalse,则必须添加以下内容:

printf("The answer is: %s\n", ans ? "true" : "false");

答案 1 :(得分:2)

来自 C Standard,第6.7.2.2:2-3 节:

  

枚举器列表中的标识符被声明为类型为int和   可能在允许的任何地方出现。)带有=的枚举数定义了   枚举常量作为常量表达式的值。 如果第一个枚举数具有   否=,值...为0 。每个后续的枚举数,不含=   定义...的值...   在上一个枚举常量的值上加1

强调我的。

答案 2 :(得分:1)

C中,enum只不过是int类型,而对于那些int的子集却带有特殊符号。另外,除非另行说明,否则第一个int成员的隐式enum值是0,第二个成员是1,依此类推。

%i可用于打印占输出的int

尽管有惯用的方法使用预处理器,但在便携式C语言中无法显示实际的enum令牌。