2013-07-21 3 views
22

Я новичок в C, и мне было интересно, почему эта программа не печатает знак%?Как напечатать знак процента (%) в c

Код:

#include<stdio.h> 

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

Итак, вы прочитали документацию? Что он сказал о знаке процента? –

+0

Этот вопрос можно легко ответить через Google. ОП мог использовать свою логику, т. Е. ('' // ') является символьной константой для'/'и применял это. Разве нет страницы man на 'printf'? – TheBlueCat

+1

Возможно, вы хотели сказать, что '' \\ '' является символьной константой для '\'? Символьная константа для '/' - ''/''. –

ответ

47

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

printf("%"); 

в

printf("%%"); 

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

printf("%c", 37); 

:)

+6

C не требует ASCII. 'printf ("% c ", 37);' не переносится. –

+1

@ H2CO3 да, но мне нравится ответ, потому что он дал дополнительный трюк! –

+0

@GrijeshChauhan Я не сказал, что мне не понравился ответ, это хороший ответ. Я только отметил, что вышеупомянутый фрагмент не переносится. –

7

Использование "%%". Номер man page описывает это требование:

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

0

Попробуйте напечатать этот путь

printf("%%"); 
+1

Этот ответ может быть более полезным. Это не дает никакой ссылки, позволяющей читателям узнать об их ошибках. – Diti

12

нет никакого объяснения в этой теме почему напечатать знак процента необходимо ввести %% и, например, не маскирующий с процентом - \%.

из comp.lang.c FAQ list · Question 12.6:

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

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

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

+0

Благодарим вас за причину. –

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