如何使用printf打印"%"字符

4

输出结果

printf("%%%%%%%%");

%%%%

我使用了 % 八次,为什么输出只有四个 %

6
% 应该被转义。%% 代表一个 %。 - Maroun
4
尽管简单,这个问题并不值得被踩。它简洁、针对主题且清晰明了。而且如果你不知道要搜索的术语,它在谷歌上也不是那么容易找到的。 - Luchian Grigore
2
@LuchianGrigore:man printf?(并在页面上搜索%%)。 - Karoly Horvath
2
不确定问题为什么会被踩,但有时候SO上那些简单答案的投票数让我惊讶,竟然能高达“9-10”!而一些需要付出艰辛努力才能写出来的深思熟虑的答案却只能得到最多“2-3”个赞。 - Sadique
1
@LuchianGrigore:你要求谷歌搜索词。我给了一个。只搜索printf同样有效(看,多么可爱的图表..)。这是另一个:print % with printf或者printf print % - Karoly Horvath
显示剩余6条评论
3个回答

14

因为 % 是一个格式说明转义序列(比如说 %d 会打印一个 int)。

如果想要程序打印出这个符号,你需要写成 %%。对于 \ 也是一样(虽然在本质上不同,但你仍然需要用它来打印一个)。


\ 有点不同。 - T.C.
@T.C. 你需要使用 \ 打印一个单个的 \。 - Luchian Grigore
5
代码中已经包含了转义符号,'\\' 表示一个字符。% 符号是格式化 IO 函数中的特殊字符, "%%" 则表示两个字符。 - T.C.
2
@LuchianGrigore 是的,你需要 \ 来打印 \,但原因基本上是不同的。我认为如果没有进一步的解释,这个评论可能会引起误导。 - Angew is no longer proud of SO
@Angew 我意识到我的表述可能会引起歧义,已经进行了编辑。 - Luchian Grigore
显示剩余2条评论

3
"%"是一个特殊字符,用于指定格式说明符。要打印字面上的"%",需要使用两个"%%"的序列。
在格式字符串中,"%"用于指定占位符,该占位符将被传递给格式化其输出的函数(如printf()/fprintf()/sprintf())的相应参数替换。
那么如何打印字面上的"%"呢?
通过使用另一个"%"进行转义。
例如,如果您希望打印整数百分比值,则需要指定"%d"作为格式说明符和一个字面上的"%",因此您可以这样做:
printf("%d%%\n", value):

阅读这篇文章,以了解更多信息。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接