【问题标题】:Why does printf("%%") print only one percent (%) symbol? [duplicate]为什么 printf("%%") 只打印百分之一 (%) 符号? [复制]
【发布时间】:2014-10-21 21:41:35
【问题描述】:

当我运行以下代码时:

#include <stdio.h>
#include <conio.h>

void main(){
    clrscr();
    printf("%%");
    getch();
}

我得到 % 作为输出?

这个逻辑背后的原因可能是什么?

【问题讨论】:

  • 因为它就是这样做的。 stackoverflow.com/a/1860164/242520
  • 一个逃脱另一个,简单:)
  • 打印它们的一些快速方法:printf("\%\%");printf("%c%c",'%','%');printf("%s","%%");
  • @barakmanos 你确定\% 会起作用吗?
  • @barakmanos printf 使用的% 系统和家庭不与语言使用的\ 系统交互,因此要转义%,您必须使用@987654331 @ 即%% 和两个%s 你可以做%%%%。但是,最好只将格式信息放在格式字符串中,例如printf("%s","%%");`printf("%s","hello %%");

标签: c printf stdio


【解决方案1】:

这就是printf 所做的:它被打印格式化(f 表示格式化)。它使用% 作为格式化字符。它是唯一的保留字符,需要转义以表示它自己,即%%。有关格式化的更多信息,请参阅手册:printf

P.S.:永远不要使用不属于程序的字符串作为第一个参数。要打印用户输入的字符串消息,请执行printf(%s, message);。否则,您的代码中将存在安全漏洞。

【讨论】:

    【解决方案2】:

    % 进入格式说明符。

    示例

    当我们写printf("%d", 20);时,它会打印20而不是%d。因为编译器将% 视为格式说明符。在编译器的心目中,% 的含义有些特殊。

    所以如果你希望“%”作为输出,那么你必须写printf("%%")。这里第一个 % 符号将抑制 % 格式说明符的含义,并将 % 打印为输出。

    【讨论】:

    • 感谢您的解决方案。
    • 我喜欢你的解释方式,+1 @KailashKarki
    • 是的,但不是编译器解释了%。是printf 过程完成的。 (字符串中的\ 由编译器解释。)
    【解决方案3】:

    对于 C printf% 是一个特殊字符,通常表示要在该位置替换的参数:printf("Hello, %s\n", "World!"); 会产生“Hello, World!”。根据您要输出的数据,您可以在 % 之后放置许多不同的内容。那么这就留下了“如果我想打印百分号怎么办”的问题?

    解决方案:使用%%

    特殊转义字符\ 也是如此。 "\n" 表示打印一个新行。如果要实际打印正斜杠,则必须输入两次\\

    参见Printf format stringMSDN

    【讨论】:

    • \ 是 C 和 C++ 的一部分,% 是 printf 的一部分,尽管它们的工作方式相似。
    【解决方案4】:

    根据标准 ISO/IEC 9899:1999 (E)

    7.19.6.1

    每个转换规范都由字符 % 引入。

    转换说明符及其含义为:

    % - 写入一个 % 字符。没有参数被转换。完整的 转换规范应为 %%。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-03
      • 2015-04-25
      • 2013-01-05
      • 2011-06-18
      • 2018-01-28
      • 2013-07-20
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多