回 帖 发 新 帖 刷新版面

主题:[讨论]C语言小问题,求教大侠~~~

C语言中printf 函数输出%%d,%a是什么含义啊,求教大侠~~~

回复列表 (共5个回复)

沙发

附上源代码:(问题比较白痴,不过就是弄不懂,请大侠指教)
#include<stdio.h>
int main()
{
    int a=2,b=5;
    printf("a=%%d,b=%a",a,b);
    system("pause");
    return 0;
}

板凳

printf 中的 2个%% 表示将输出 一个'%'.
%a 这是C99中新增加的一个格式,它按16进制的格式输出浮点数。

3 楼

但是结果是a=%d,b=a
还请大侠仔细讲一下~~

4 楼

还有个%A和%a相对应。对于这个格式,下面的代码和输出 很容易理解的。
[code=c]#include <stdio.h>

int main ( void )
{
#define foo(a)   printf ( "\n  %-6.2f |    %-9a |    %-9A ", (a), (a), (a) )

  const char *p1 = "======================";
  const char *p2 = "----------------------";

  printf (  "  %-6s |    %-9s |    %-9s ", "%6.2f", "%9a", "%9A" ); 
  printf ("\n==%.6s=+====%.9s=+====%.9s=",  p1,      p1,    p1   );
  
  foo (.0f);   foo (.25f);   foo (.5f);   foo (1.f);
  foo (2.f);   foo (4.f);    foo (8.f);   foo (16.f); 
  
  printf ("\n--%.6s-+----%.9s-+----%.9s-",  p2,      p2,    p2   );
  foo (1.25f); foo (1.5f);   foo (2.25f); foo (2.5f),
  foo (4.25f); foo (4.5f);   foo (8.25f); foo (8.5f); puts ("");
  
  return 0;
}[/code]
[code=c]
  %6.2f  |    %9a       |    %9A
=========+==============+==================
  0.00   |    0x0p+0    |    0X0P+0
  0.25   |    0x1p-2    |    0X1P-2
  0.50   |    0x1p-1    |    0X1P-1
  1.00   |    0x1p+0    |    0X1P+0
  2.00   |    0x1p+1    |    0X1P+1
  4.00   |    0x1p+2    |    0X1P+2
  8.00   |    0x1p+3    |    0X1P+3
  16.00  |    0x1p+4    |    0X1P+4
---------+--------------+------------------
  1.25   |    0x1.4p+0  |    0X1.4P+0
  1.50   |    0x1.8p+0  |    0X1.8P+0
  2.25   |    0x1.2p+1  |    0X1.2P+1
  2.50   |    0x1.4p+1  |    0X1.4P+1
  4.25   |    0x1.1p+2  |    0X1.1P+2
  4.50   |    0x1.2p+2  |    0X1.2P+2
  8.25   |    0x1.08p+3 |    0X1.08P+3
  8.50   |    0x1.1p+3  |    0X1.1P+3[/code]

5 楼

[quote]但是结果是a=%d,b=a
还请大侠仔细讲一下~~[/quote]
printf("a=%%d,b=%a",a,b);
首先可以肯定会输出"a=",然后2个连续的%号将输出一个'%',然后输出"d,b=".

%a 这个格式是C99中的一个格式,很多编译器是不能识别的。我用的是“gcc (GCC) 4.5.2”支持这个格式。如果不能识别格式,可能按字面意思输出"%a"或把%号消耗掉输出"a"

结合上面的输出, "a=%d,b=%a" 或 "a=%d,b=a"

我来回复

您尚未登录,请登录后再回复。点此登录或注册