主题:[讨论]C语言小问题,求教大侠~~~
sinperhu
[专家分:0] 发布于 2011-03-13 15:11:00
C语言中printf 函数输出%%d,%a是什么含义啊,求教大侠~~~
回复列表 (共5个回复)
沙发
sinperhu [专家分:0] 发布于 2011-03-13 15:24:00
附上源代码:(问题比较白痴,不过就是弄不懂,请大侠指教)
#include<stdio.h>
int main()
{
int a=2,b=5;
printf("a=%%d,b=%a",a,b);
system("pause");
return 0;
}
板凳
windy0will [专家分:2300] 发布于 2011-03-13 15:58:00
printf 中的 2个%% 表示将输出 一个'%'.
%a 这是C99中新增加的一个格式,它按16进制的格式输出浮点数。
3 楼
sinperhu [专家分:0] 发布于 2011-03-13 16:15:00
但是结果是a=%d,b=a
还请大侠仔细讲一下~~
4 楼
windy0will [专家分:2300] 发布于 2011-03-13 16:19:00
还有个%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 楼
windy0will [专家分:2300] 发布于 2011-03-13 16:24:00
[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"
我来回复