Причина решения вопроса - PullRequest
1 голос
/ 10 июля 2010

Каковы результаты следующих действий и в чем причина этого?

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

Ответ "%%", но я не знаю почему.

Ответы [ 4 ]

8 голосов
/ 10 июля 2010

% - начало спецификатора формата. (Например, "%d" означает «напечатать int».) A % после того, как спецификатор формата покинет его, напечатав один «%».

То есть, точно так же "\\" приводит к одной обратной косой черте, "%%" приводит к одному знаку процента.

3 голосов
/ 10 июля 2010

Технически, вывод может быть любым, так как вы не печатали перевод строки в конце, а также потому, что вы не включили stdio.h: -).

Однако исправим две ошибки:

#include <stdio.h>

int main(void)
{
    printf("%%%%\n");
    return 0;
}

Выше должно быть напечатано %% с последующим переводом строки.

Каждая спецификация преобразования представлена ​​символом%.

...

Спецификаторы преобразования и их значения:

...

%: записан символ %. Ни один аргумент не преобразуется. Полная спецификация преобразования должна быть %%.

(C99 7.19.6.1).

1 голос
/ 10 июля 2010

в printf, % обычно используется для обозначения токена, например %s или %d или %5.2fЕсли вы хотите вывести литерал %, вы используете %%.

0 голосов
/ 10 июля 2010
Format specifiers are typically introduced by a % character,
and a literal percent sign can be copied into the output 
using the escape sequence %%.

Источник .

Таким образом, вы можете напечатать% в выводе используя %%. Вопрос имеет ряд символов%, следовательно, вывод будет %%.

...