Почему выходные данные этого C кода отличаются при форматировании с% c и% d - PullRequest
2 голосов
/ 13 февраля 2020

Взгляните на следующий фрагмент кода:

#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 Почему выходы отличаются при замене d на c?

Ответы [ 4 ]

8 голосов
/ 13 февраля 2020

Поскольку с %c i интерпретируется как символ, и если вы посмотрите на таблицу ASCII , вы увидите, что 48 представляет символ '0', 49 равен '1', et c.

6 голосов
/ 13 февраля 2020

%d распечатывает число и %c символ. Коды ASCII для 0-9 - 48-57, поэтому эти цифры печатаются в виде символов.

2 голосов
/ 13 февраля 2020

% d - это спецификатор формата для целых чисел со знаком, тогда как% c - это спецификатор формата для символов. пусть i = 48, когда используется% d, он печатает целое число (печатает 48). но когда используется% c, 48 принимается как значение ASCII, и 0 печатается для 48 значений ascii 0 = 48 1 = 49. , , скоро надеюсь, что вы понимаете, нажмите upvote. :);)

2 голосов
/ 13 февраля 2020

В C, когда вы хотите напечатать что-то, вам нужно указать спецификатор формата. Затем компилятор распечатает все соответственно.

По вашему вопросу спецификатор %d предназначен для печати номера, а %c - для печати символа.

Так что, когда вы пытались напечатать целочисленное значение, используя %c спецификатор формата, после чего система конвертирует 48-57 в тип char, то есть '0'-'9'. И если вы go дальше, он напечатает

:; <=>? @ AB C и т. Д.

И это потому, что система следует ASCII.

...