2013-09-09 7 views
0

Я использовал это в препроцессореКакую букву вы используете для постоянного заполнителя?

#define SQMETERS_PR_SEC 2 

И это в главной функции

printf(" to mow your lawn with a speed of %c.\n\n", SQMETERS_PR_SEC); 

Но% с просто возвращает пустое пространство.

Какое письмо вы используете для постоянного заполнителя?

+2

Ваше заявление будет печатать 2 как беззнаковое символ, который является нецензурным. Вы уверены, что это то, что вы хотите сделать? –

+0

Просто для дальнейшего использования и более простого поиска, термин, который вы ищете, является «спецификатором формата». – Vicky

ответ

6

В этом случае ваша константа является маленьким целым числом, поэтому вы должны печатать ее с помощью %d.

Строка константа, однако, будет напечатана с помощью %s и т. Д. Существует не универсальный трюк для печати константы, независимо от типа.

Причиной этого является то, что ваша «константа» в действительности является макро, что означает, что в любой момент за ее позиции SQMETERS_PR_SECполучает текстуально заменен 2. Вот и все - не причудливая интерпретация или что-то еще, это текстовая копия/вставка.

+1

Кстати, использование% s приведет к неопределенному поведению в этом случае, не так ли? Поскольку% s ожидало бы '' \ 0'' – dhein

+0

@Zaibis Да, но пример не был строковой константой. Я просто приводил это как еще один пример. – orlp

3

Поскольку определить только заменяет код, и вы говорите, что вы хотите поставить 2 истолковано как char в функцию printf(), что не похож на '2', ваш просто положить в этом месте %c экранирования в последовательности ASCII-кода индекса 2.

если определить бы то:

#define SQMETERS_PR_SEC '2' 

Тогда это было бы правильно.

3

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

2 - это значение ASCII для символа управления «Начало текста», которое не печатается, поэтому printf выведет местозаполнитель (например, пустое пространство).

если вы хотите напечатать номер, используйте %d вместо:

printf(" do foo bar at %d kul\n", 2);