2012-06-08 2 views
2

Согласно K & R C раздел 1.6, a char является типом целого числа. Так зачем нам %c. И почему мы не можем использовать %d?Почему% c используется в C?

+0

char - это 8-разрядный интеллект –

+1

@MaziarBouali Не обязательно. – Pubby

+0

'printf' должен знать размер аргумента, чтобы напечатать его (чтобы его соответствующим образом произнести). У 'char' есть размер 1, у' int' есть, по крайней мере, на большинстве машин больше. Кроме того, при использовании '% c' вы хотите напечатать символ, а не номер. На языке 'D' вы всегда будете использовать'% s' и пусть компилятор беспокоится о типах. – Matej

ответ

22

Поскольку %d напечатает числовой код символа char:

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

печатает 97 (на системе ASCII), в то время как

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

печатает a.

+1

И не забывайте 'scanf':'% d' читает и преобразует числовые строки, где '% c' читает и преобразует отдельные символы. –

1

Грубо говоря, %c печатает ASCII-представление символа. %d печатает десятичное значение.

+2

За исключением того, что это не ASCII – Pubby

4

Хотя это целое число, %c интерпретирует его числовое значение как значение символа для отображения. Например, для символа a:

Если вы использовали %d вы получите целое число, например, 97, тем внутреннего представления о характере a

против

с использованием %c для отображения символа 'a' сам (при использовании ASCII)

Т.е., это вопрос Внутреннее представление vs для внешних целей (например, printf)

1

Если вы используете %c, вы будете печатать (или сканировать) символ или символ. Если вы используете %d, вы будете печатать (или сканировать) целое число.

printf("%d", 0x70); 

Как машина узнает, что вы хотите вывести символ, а не его эквивалентное значение ASCII?

-1

% d think char is 32bit и печатает его как целое число, но% c конвертирует значение int char в символ ascii, а затем печатает его.

-1

%d используется для печати decimal(integer) номер, в то время как %c используется для печати character .Если вы пытаетесь напечатать символ с форматом %d компьютер распечатывает ASCII код символа.

Смежные вопросы