Как напечатать знак процента (%) на C?

Я новичок в C. Почему эта программа печатает знак %?

Код такой:

#include <stdio.h>

main()
{
     printf("%");
     getch();
}

person Paul Filch    schedule 21.07.2013    source источник
comment
Так вы читали документацию? Что там говорилось о знаке процента?   -  person    schedule 21.07.2013
comment
На этот вопрос легко ответить через Google. OP мог бы использовать его логику, т.е. ('//) является символьной константой для /, и применил это. Разве на printf нет справочной страницы?   -  person TheBlueCat    schedule 22.07.2013
comment
Возможно, вы хотели сказать, что '\\' - символьная константа для \ ? Символьная константа для / - '/'.   -  person This isn't my real name    schedule 22.07.2013


Ответы (4)


Ваша проблема в том, что вам нужно изменить:

printf("%"); 

to

printf("%%");

Или вы можете использовать код ASCII и написать:

printf("%c", 37);

:)

person C_Intermediate_Learner    schedule 21.07.2013
comment
C не требует ASCII. printf("%c", 37); не переносится. - person ; 21.07.2013
comment
@ H2CO3 да, но мне нравится ответ, потому что он дал дополнительный трюк! - person Grijesh Chauhan; 21.07.2013
comment
@GrijeshChauhan Я не говорил, что мне не понравился ответ, это хороший ответ. Я только указал, что вышеупомянутый фрагмент не переносится. - person ; 21.07.2013
comment
@ H2CO3 Да, я знаю ... Я просто хочу сказать вам, что могу просто опубликовать printf("%%"); ответ, но не используя ascii. Вы прокомментировали здесь, когда я редактировал этот ответ. :) - person Grijesh Chauhan; 21.07.2013
comment
@GrijeshChauhan Конечно. Не обижайся :) - person ; 21.07.2013
comment
Почему бы не использовать '%' вместо 37? - person Diti; 22.03.2014

В этой теме нет объяснения, зачем печатать знак процента. Необходимо ввести %%, а не, например, escape-символ с процентом - \%.

Из списка часто задаваемых вопросов comp.lang.c · Вопрос 12.6:

Причина, по которой печатать знаки% с помощью printf сложно, заключается в том, что% по сути является escape-символом printf. Каждый раз, когда printf видит%, он ожидает, что за ним будет следовать символ, указывающий, что делать дальше. Последовательность из двух символов %% предназначена для печати одного%.

Чтобы понять, почему% не может работать, помните, что обратная косая черта \ является escape-символом компилятора и управляет тем, как компилятор интерпретирует символы исходного кода во время компиляции. В этом случае, однако, мы хотим контролировать, как printf интерпретирует свою строку формата во время выполнения. Что касается компилятора, escape-последовательность% не определена и, вероятно, приводит к единственному символу%. Маловероятно, что и \, и% дойдут до printf, даже если printf будут специально обрабатывать \.

Итак, причина, по которой нужно набрать printf("%%");, чтобы напечатать один %, заключается в том, что определено в функции printf. % - это escape-символ printf и \ компилятора.

person macfij    schedule 08.08.2014
comment
Спасибо, что объяснили причину. - person Dave Voyles; 13.03.2016

Используйте 1_. На странице руководства описывается это требование:

% Написано "%". Никакой аргумент не преобразуется. Полная спецификация преобразования - «%%».

person Carl Norum    schedule 21.07.2013

Попробуйте распечатать таким способом

printf("%%");
person Santhosh Pai    schedule 21.07.2013
comment
Этот ответ мог бы быть более полезным, чем этот. В нем нет ссылок, позволяющих читателям узнать о своих ошибках. - person Diti; 22.03.2014