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();
}
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();
}
Twój problem jest, że trzeba zmienić:
printf("%");
do
printf("%%");
Albo można użyć kodu ASCII i napisać:
printf("%c", 37);
:)
C nie wymaga ASCII. 'printf ("% c ", 37);' nie jest przenośny. –
@ H2CO3 tak, ale podoba mi się odpowiedź, ponieważ dostał dodatkową sztuczkę! –
@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. –
Zastosowanie "%%"
. W dokumencie man page opisano ten wymóg:
%
Zapisano "%". Żaden argument nie jest konwertowany. Pełna specyfikacja konwersji to "%%
".
Spróbuj wydrukować tę drogę
printf("%%");
Ta odpowiedź może być bardziej przydatna. Nie daje żadnego odniesienia, dzięki któremu czytelnicy mogą dowiedzieć się o swoich błędach. – Diti
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.
Dziękuję za przedstawienie przyczyny. –
Czy też przeczytałeś dokumentację? Co powiedział na temat znaku procentu? –
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
Być może chciałeś powiedzieć, że '' \\ ''jest stałą znaku dla' \ '? Stała znakowa dla '/' to ''/''. –