Jak uciec znak % (procent) w printf C?
Jak uniknąć znaku % podczas używania printf
W C?
printf("hello\%"); /* not like this */
13 answers
Możesz od tego uciec, umieszczając podwójne ' % ' w następujący sposób: %%
Używając Twojego przykładu:
printf("hello%%");
Znak specjalny '%' jest tylko dla printf. Jeśli tak:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Wydrukuje: This is a's value: %%
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-27 13:06:38
Jak mówili inni, % % ucieknie %.
Zauważ jednak, że nigdy nie powinieneś tego robić:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Kiedy musisz wydrukować ciąg znaków, zawsze, zawsze, zawsze wydrukuj go za pomocą
printf("%s", c)
Aby zapobiec osadzonemu % z powodowaniem problemów [naruszenia pamięci, segfault, itp]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 14:06:41
Jeśli w łańcuchu nie ma formatów, możesz użyć puts
(lub fputs
):
puts("hello%");
Jeśli w łańcuchu jest format:
printf("%.2f%%", 53.2);
Jak wspomniano w komentarzach, puts
dodaje \n
do wyjścia, a fputs
nie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 12:19:32
Z samym sobą...
printf("hello%%"); /* like this */
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 14:03:58
Nitpick:
Tak naprawdę nie unikasz %
w łańcuchu, który określa format dla rodziny funkcji printf()
(i scanf()
).
%
, w rodzinie funkcji printf()
(i scanf()
), rozpoczyna specyfikację konwersji. Jedna z reguł specyfikacji konwersji mówi, że %
jako specyfikator konwersji (bezpośrednio po %
, który rozpoczął specyfikację konwersji) powoduje, że znak '%'
jest zapisywany bez argumentu nawrócony.
Łańcuch naprawdę ma 2 '%'
znaki wewnątrz (w przeciwieństwie do znaków specjalnych: "a\bc"
jest łańcuchem z 3 znakami Nie null; "a%%b"
jest łańcuchem z 4 znakami Nie null).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 14:28:42
Użyj podwójnego % %
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 14:04:10
Tak:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-07 14:28:18
Możesz użyć %%:
printf("100%%");
Wynik jest następujący:
100%
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 14:38:55
Używasz nieprawidłowego formatu, powinieneś użyć %%
do drukowania %
. Twój kod powinien brzmieć:
printf("hello%%");
Czytaj więcej Wszystkie SPECYFIKATORY FORMATU używane w C .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 13:53:57
Odwrotny ukośnik w C jest używany do ucieczki znaków w łańcuchach. Łańcuchy znaków nie rozpoznają %
jako znaku specjalnego i dlatego nie będzie konieczna Ucieczka. printf
to inna sprawa: użyj %%
, aby wydrukować %
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 15:30:41
Możesz po prostu użyć %
dwa razy, czyli "%%"
Przykład:
printf("You gave me 12.3 %% of profit");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-23 20:21:58
Yup, użyj printf("hello%%");
i gotowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 15:29:48
Podwójne ' % ' działa również w "".Format (...).
Przykład (z iDrawApertureMask= = 87, fCornerRadMask = = 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
podaje żądaną i oczekiwaną wartość (string contents in) csCurrentLine;
"%ADD87C, 0.0500* % "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 17:35:01