Réponses:
Vous pouvez y échapper en affichant un double '%' comme ceci: %%
En utilisant votre exemple:
printf("hello%%");
Le signe '%' qui s'échappe est uniquement pour printf. Si tu fais:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Il imprimera: This is a's value: %%
%
est spécifique à printf
, n'est -ce pas?
\045
est un échappement au moment de la compilation qui fait partie du langage et se transformera en une %
fois compilé. printf
est une fonction d'exécution, elle traite donc les octets de votre chaîne, pas le code source C, et elle a ses propres séquences d'échappement qui font partie de la fonction . En bref, printf
est une "langue à l'intérieur d'une langue", et printf("This is a's value: %s\n", a);
donne le même résultat que printf("This is a's value: \045\0163\012", a);
.
printf("hello%c", '%');
. Cependant, %%
c'est mieux car il n'utilise pas d'autre argument.
Comme d'autres l'ont dit, %% échappera au%.
Notez cependant que vous ne devriez jamais faire cela:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Chaque fois que vous devez imprimer une chaîne, imprimez-la toujours, toujours
printf("%s", c)
pour empêcher un% intégré de causer des problèmes [violations de mémoire, erreur de segmentation, etc.]
S'il n'y a pas de formats dans la chaîne, vous pouvez utiliser puts
(ou fputs
):
puts("hello%");
s'il y a un format dans la chaîne:
printf("%.2f%%", 53.2);
Comme indiqué dans les commentaires, puts
ajoute un \n
à la sortie et fputs
ne le fait pas.
puts
. Je n'ai jamais pensé puts
à imprimer des cordes et j'ai sauté directement dessus printf
. Plus maintenant.
Avec lui-même ...
printf("hello%%"); /* like this */
Nitpick:
Vous n'échappez pas vraiment %
à la chaîne qui spécifie le format de la famille de fonctions printf()
(et scanf()
).
Dans %
la famille de fonctions printf()
(et scanf()
), démarre une spécification de conversion. L'une des règles de spécification de conversion stipule qu'un en %
tant que spécificateur de conversion (immédiatement après le %
début de la spécification de conversion) entraîne '%'
l'écriture d' un caractère sans conversion d'argument.
La chaîne contient vraiment 2 '%'
caractères à l'intérieur (par opposition aux caractères d'échappement: "a\bc"
est une chaîne avec 3 caractères non nuls; "a%%b"
est une chaîne avec 4 caractères non nuls).
La barre oblique inverse en C est utilisée pour échapper les caractères dans les chaînes. Les chaînes ne reconnaîtraient pas% comme un caractère spécial et, par conséquent, aucun échappement ne serait nécessaire. Printf est une autre affaire: utilisez %% pour imprimer un%.
Vous pouvez utiliser %%:
printf("100%%");
Le résultat est:
100%
vous utilisez un spécificateur de format incorrect que vous devez utiliser %%
pour l'impression %
. Votre code doit être:
printf("hello%%");
En savoir plus tous les formats utilisés dans spécificateurs C .
Vous pouvez simplement utiliser %
deux fois, c'est-à-dire"%%"
Exemple:
printf("You gave me 12.3 %% of profit");
Le double '%' fonctionne également dans ".Format (…). Exemple (avec iDrawApertureMask == 87, fCornerRadMask == 0,05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
donne la valeur souhaitée et attendue de (contenu de la chaîne dans) csCurrentLine;"% ADD87C, 0,0500 *% "