【问题标题】:Why are the outputs of this C code different when formatting with %c and %d为什么使用 %c 和 %d 格式化时此 C 代码的输出不同
【发布时间】:2020-05-28 23:20:51
【问题描述】:

看看下面这段代码:

#include <stdio.h> 

int main() 
{ 
  int i;

  for (i = 48; i < 58; i++)
  {
    printf("%d", i);
  }
return 0; 
}

输出为:48495051525354555657 但是,如果您将 printf("%d", i); 更改为 printf("%c", i);,则输出变为:0123456789

不应该都输出48495051525354555657为什么用c替换d时输出不同?

【问题讨论】:

  • @Bathsheba 是吗?根据this%c 需要一个int,然后将其转换为unsigned char
  • @Blaze:如果我错了,请回答,如果我得到纠正,我会投票!
  • @Bathsheba ha,有人忍着我。 :) 老实说,我还以为是 UB,直到我查到它。
  • "%d"-> "%d " 输出会更清晰一些
  • 也可以试试for (i = '0'; i &lt;= '9'; i++) printf("%d:%c ", i, i);

标签: c printf ascii string-formatting format-specifiers


【解决方案1】:

因为%ci被解释为一个字符,如果你查看ASCII table你可以看到48代表字符'0'49'1'等等。

【讨论】:

  • 啊,我明白了。这意味着当使用 %c printf() 时将 i 转换为其 ACII 代码,而 %d 仅打印小数。是不是 Eraklon?
【解决方案2】:

%d 打印出一个数字和%c 一个字符。 0-9 的 ASCII 码是 48-57,因此它将这些数字打印为字符。

【讨论】:

    【解决方案3】:

    在 C 中,当您想要打印某些内容时,您需要提供格式说明符。然后编译器会相应地打印出来。

    根据您的问题,%d 说明符用于打印数字,%c 用于打印字符。

    因此,当您尝试使用%c 格式说明符打印整数值时,系统会将48-57 转换为char 类型,即'0'-'9'。如果你走得更远,它会打印出来

    : ; ? @A B C 等等。

    这是因为系统遵循ASCII。

    【讨论】:

      【解决方案4】:

      %d 是有符号整数的格式说明符,而 %c 是字符的格式说明符。 当使用 %d 时让 i=48 打印整数(打印 48)。 但是当使用 %c 时,将 48 视为 ASCII 值,并为 48 打印 0 ascii 值 0 = 48 1 = 49 . . . 很快 希望您理解按upvote。 :) ;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多