wake-up-neo.net

Wie kann man das% (Prozent) -Zeichen in Cs printf umgehen?

Wie entkommen Sie dem% -Zeichen, wenn Sie printf in C verwenden?

printf("hello\%"); /* not like this */
246
Chris_45

Sie können es umgehen, indem Sie ein doppeltes "%" wie folgt posten: %%

An deinem Beispiel:

printf("hello%%");

Das Escape-Zeichen% gilt nur für printf. Wenn Sie tun:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

Es wird gedruckt: This is a's value: %%

369

Wie andere bereits gesagt haben, wird %% dem% entgehen.

Beachten Sie jedoch, dass Sie dies niemals tun sollten:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

Wann immer Sie einen String drucken müssen, drucken Sie ihn immer immer mit

printf("%s", c)

um zu verhindern, dass ein eingebetteter% Probleme verursacht (Speicherverletzungen, Segfault usw.)

34
Mikeage

Wenn der String keine Formate enthält, können Sie puts (oder fputs ) verwenden:

puts("hello%");

wenn der String ein Format enthält:

printf("%.2f%%", 53.2);

Wie in den Kommentaren erwähnt, hängt puts einen \n an die Ausgabe an und fputs nicht.

29
Sinan Ünür

Mit sich selbst ...

printf("hello%%"); /* like this */
9
martin clayton

Nitpick:
Sie können den % in der Zeichenfolge, die das Format für die Funktionsfamilie printf() (und scanf()) angibt, nicht wirklich entgehen.

Der % in der Funktionsfamilie printf() (und scanf()) startet eine Konvertierungsspezifikation. Eine der Regeln für die Konvertierungsspezifikation besagt, dass ein % als Konvertierungsspezifizierer (unmittelbar nach %, mit dem die Konvertierungsspezifikation gestartet wurde) bewirkt, dass ein '%'-Zeichen ohne konvertiertes Argument geschrieben wird.

Die Zeichenfolge really enthält 2 '%'-Zeichen (im Gegensatz zu Escape-Zeichen: "a\bc" ist eine Zeichenfolge mit drei Nicht-Null-Zeichen; "a%%b" ist eine Zeichenfolge mit 4 Nicht-Null-Zeichen).

7
pmg

verwenden Sie ein doppeltes %%

6
jldupont

So was:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
4
Salman A

Der Backslash in C wird verwendet, um Zeichen in Strings zu umgehen. Zeichenfolgen würden% nicht als Sonderzeichen erkennen, und daher wäre kein Escapezeichen erforderlich. Printf ist eine andere Sache: Verwenden Sie %%, um ein% zu drucken.

3

Ja, verwenden Sie printf ("Hallo %%"); und es ist fertig.

2
Kevin

wenn Sie einen falschen Formatbezeichner verwenden, sollten Sie %% zum Drucken % verwenden. Ihr Code sollte lauten: 

printf("hello%%");  

Lesen Sie mehr alle Formatbezeichner, die in C verwendet werden.

2
Pankaj Prakash

Sie können % einfach zweimal verwenden, dh "%%"

Beispiel:

printf("You gave me 12.3 %% of profit");
2
Md Shahriar

Sie können %% verwenden:

printf("100%%");

Das Ergebnis ist:

100%

2
Donald Duck

Das doppelte '%' funktioniert auch in ".Format (…) . Beispiel (mit iDrawApertureMask == 87, fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;gif den gewünschten und erwarteten Wert von (Stringinhalt in ) csCurrentLine; "% ADD87C, 0,0500 *%"

0
dindea