2013-07-21 16 views
22

Jestem początkujący w C, i zastanawiałem się, dlaczego ten program nie drukuje znaku%?Jak wydrukować znak procentu (%) w c

Kod jest:

#include<stdio.h> 

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

Czy też przeczytałeś dokumentację? Co powiedział na temat znaku procentu? –

+0

Na to pytanie można łatwo odpowiedzieć przez Google. OP mógł użyć swojej logiki, tzn. ('' // ') jest stałą znaku dla'/'i zastosował to. Czy nie ma również strony podręcznika 'printf'? – TheBlueCat

+1

Być może chciałeś powiedzieć, że '' \\ ''jest stałą znaku dla' \ '? Stała znakowa dla '/' to ''/''. –

Odpowiedz

47

Twój problem jest, że trzeba zmienić:

printf("%"); 

do

printf("%%"); 

Albo można użyć kodu ASCII i napisać:

printf("%c", 37); 

:)

+6

C nie wymaga ASCII. 'printf ("% c ", 37);' nie jest przenośny. –

+1

@ H2CO3 tak, ale podoba mi się odpowiedź, ponieważ dostał dodatkową sztuczkę! –

+0

@GrijeshChauhan Nie powiedziałem, że nie podoba mi się odpowiedź, to dobra odpowiedź. Podkreśliłem tylko, że wspomniany wyżej fragment nie jest przenośny. –

7

Zastosowanie "%%". W dokumencie man page opisano ten wymóg:

% Zapisano "%". Żaden argument nie jest konwertowany. Pełna specyfikacja konwersji to "%%".

0

Spróbuj wydrukować tę drogę

printf("%%"); 
+1

Ta odpowiedź może być bardziej przydatna. Nie daje żadnego odniesienia, dzięki któremu czytelnicy mogą dowiedzieć się o swoich błędach. – Diti

12

nie ma wyjaśnienie, dlaczego w tym temacie, aby wydrukować znak procentową trzeba wpisać %% a nie na przykład ucieczkę charakter z procentem - \%.

z comp.lang.c FAQ list · Question 12.6:

Powodem jest to trudne do wydrukowania% znaki z printf jest to, że jest % printf zasadniczo na charakter ucieczki. Ilekroć printf widzi%, to spodziewa się, że będzie podążał za znakiem informującym, co dalej. Dwuznakowa sekwencja %% jest zdefiniowana tak, aby drukować pojedynczy%.

Aby zrozumieć, dlaczego \% nie może działać, pamiętaj, że ukośnik odwrotny \ jest znakiem ucieczki kompilatora i kontroluje, w jaki sposób kompilator interpretuje znaki kodu źródłowego podczas kompilacji. W tym przypadku jednak chcemy, aby kontrolował sposób, w jaki printf interpretuje swój ciąg formatu w czasie wykonywania. W zakresie od jako kompilatora sekwencja ucieczki \% jest niezdefiniowana, a prawdopodobnie skutkuje pojedynczym znakiem%. Byłoby mało prawdopodobne, że zarówno \ jak i% przejdą do printf, nawet jeśli printf byłby przygotowany do traktowania \ specjalnie.

dlatego powód, dla którego należy wpisać printf("%%");, aby wydrukować pojedynczy%, jest zdefiniowany w funkcji printf. % jest ucieczką znaków printf i \ of kompilatora.

+0

Dziękuję za przedstawienie przyczyny. –

Powiązane problemy