【问题标题】:Why is it returning 0 or 1 and not True or False [duplicate]为什么它返回 0 或 1 而不是 True 或 False [重复]
【发布时间】:2018-11-21 15:11:31
【问题描述】:
#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。 我希望它从我创建的枚举中返回值。

【问题讨论】:

  • 您认为枚举中的值在内部是如何表示的?
  • 如果我将其更改为 TRuuue 和 Faaalse,它仍然返回 0 和 1。
  • 更改名称与 Govind 的问题完全无关。更改枚举 ({ True, False }) 中的 order 将非常重要。你是这个意思吗?
  • 那样的话,我是无能为力的。

标签: c


【解决方案1】:

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

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

【讨论】:

  • 已更新。与我的回答相比,这个很有用。
  • @Bathsheba 您的回答也很有用。我给了你一个 +1,因为它更详细。
【解决方案2】:

来自C Standard,§ 6.7.2.2:2-3

枚举器列表中的标识符被声明为具有 int 类型的常量,并且 可以出现在任何允许的地方。)带有 = 的枚举数定义其 枚举常量作为常量表达式的值。 如果第一个枚举器有 没有 =,值 ... 为 0。没有 = 的每个后续枚举数 定义它的...值...通过 将前一个枚举常量的值加 1

强调我的。

【讨论】:

    【解决方案3】:

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

    %i 可用于打印int,它负责输出。

    在可移植 C 中无法显示实际的 enum 标记,尽管有一些惯用的方法使用预处理器。

    【讨论】:

    • 枚举令牌只能在程序文本中使用。
    • 令牌名称也可能在调试数据库中可用,具体取决于构建设置(如 Windows 上的 .pdb 文件)
    • enum 不一定是int
    • enum 不一定非要int,但也可以是任何整数类型,它可以表示所有值。 每个枚举类型都应与char、有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的,128) 但应该能够表示枚举的所有成员的值。 ... 从 6.7.2.2 枚举说明符 - 4
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2020-02-04
    • 2019-12-07
    • 2012-01-05
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多