【问题标题】:How do I print the percent sign(%) in C? [duplicate]如何在 C 中打印百分号(%)? [复制]
【发布时间】:2013-07-20 10:26:35
【问题描述】:

为什么这个程序不打印% 符号?

#include <stdio.h>

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

【问题讨论】:

  • 那么您阅读文档了吗?百分号是怎么说的?
  • 这个问题可以通过谷歌轻松回答。 OP 可以使用他的逻辑,即 ('//) 是/ 的字符常量并应用了它。 printf 上不是也有手册页吗?
  • 也许您的意思是说'\\'\ 的字符常量? / 的字符常量是 '/'

标签: c printf percentage


【解决方案1】:

本主题中没有解释为什么要打印百分号。必须键入 %% 而不是例如带有百分比的转义字符 - \%

来自comp.lang.c FAQ list · Question 12.6

用 printf 打印 % 符号很棘手的原因是 % 是 本质上是 printf 的转义字符。每当 printf 看到一个 %,它 期望它后面跟着一个告诉它下一步做什么的字符。 两个字符序列 %% 被定义为打印单个 %。

要了解为什么 % 不能工作,请记住反斜杠 \ 是 编译器的转义字符,并控制编译器如何解释 编译时的源代码字符。然而,在这种情况下,我们想要 控制 printf 在运行时如何解释其格式字符串。目前 就编译器而言,转义序列 % 未定义,并且 可能会导致单个 % 字符。不太可能 \ 和 % 都可以通过 printf,即使 printf 是 准备特别对待\。

因此,必须键入 printf("%%"); 才能打印单个 % 的原因是 printf 函数中定义的。 % 是 printf 的转义字符,\ 是编译器的转义字符。

【讨论】:

  • 感谢您提供原因。
【解决方案2】:

你的问题是你必须改变:

printf("%"); 

printf("%%");

或者你可以使用 ASCII 码写:

printf("%c", 37);

:)

【讨论】:

  • C 不需要 ASCII。 printf("%c", 37); 不可移植。
  • @H2CO3 是的,但我喜欢这个答案,因为他给了一个额外的技巧!
  • @GrijeshChauhan 我没有说我不喜欢这个答案,这是一个很好的答案。我只是指出前面提到的 sn-p 是不可移植的。
  • @GrijeshChauhan 当然。没有冒犯:)
  • 为什么不用'%' 而不是37
【解决方案3】:

试着用这种方式打印出来

printf("%%");

【讨论】:

  • 这个答案可能比这更有用。它没有提供任何参考,让读者了解他们的错误。
【解决方案4】:

使用"%%"man page 描述了这个要求:

% 写入了“%”。没有参数被转换。完整的转换规范是'%%'。

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2012-08-14
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多