【问题标题】:Why is %c used in C?为什么在 C 中使用 %c?
【发布时间】:2012-06-08 11:28:44
【问题描述】:

根据 K&R C 第 1.6 节,char 是一种整数。那么为什么我们需要%c。为什么我们不能对所有事情都使用%d

【问题讨论】:

  • @MaziarBouali 不一定。
  • printf 需要知道参数的大小才能打印它(可以说是适当地转换它)。 char 的大小为 1,int 至少有这个大小,在大多数机器上更多。此外,当使用%c 时,您希望打印一个字符,而不是一个数字。在D 语言中,您将始终使用%s 并让编译器担心类型。
  • @MatejNanut 否,小于int 的整数类型在传递给可变参数函数时会提升为int
  • @Pubby:谢谢,我不知道。但是,在使用 long 时仍然存在这种歧义,它们是整数,您不能(或不应该)为它们使用 %d

标签: c


【解决方案1】:

因为%d会打印char的数字字符代码:

printf("%d", 'a');

打印97(在 ASCII 系统上),而

printf("%c", 'a');

打印a

【讨论】:

  • 别忘了scanf%d 读取和转换数字字符串,而%c 读取和转换单个字符。
【解决方案2】:

虽然它是一个整数,但%c 将其数值解释为一个字符值以供显示。比如a这个角色:

如果你使用%d,你会得到一个整数,例如,97,这是字符a内部表示

对比

使用%c 显示字符“a”本身(如果使用ASCII)

即,这是内部表示解释用于外部目的的问题(例如printf

【讨论】:

    【解决方案3】:

    粗略地说,%c 打印字符的 ASCII 表示。 %d 打印它的十进制值。

    【讨论】:

      【解决方案4】:

      如果您使用%c,您将打印(或扫描)一个字符或char。如果您使用%d,您将打印(或扫描)一个整数。

      printf("%d", 0x70);
      

      机器如何知道您要输出一个字符,而不是其等效的 ASCII 值?

      【讨论】:

        【解决方案5】:

        %d 认为 char 是 32bit 并像整数一样打印它,但是 %c 将 char 的 int 值转换为 ascii 字符然后打印它。

        【讨论】:

          【解决方案6】:

          %d用于打印decimal(integer)数字,而%c用于打印character。如果您尝试打印%d格式的字符,计算机将打印ASCII代码字符。

          【讨论】:

            猜你喜欢
            • 2018-10-27
            • 1970-01-01
            • 2010-10-07
            • 1970-01-01
            • 2015-06-08
            • 2014-01-04
            • 1970-01-01
            • 2021-10-28
            • 1970-01-01
            相关资源
            最近更新 更多