由于在C下面的程序,%%在printf中做了什么?
#include <stdio.h>
int main()
{
printf(" \"Books %% OR %% apparels\"");
getchar();
return 0;
}
该程序打印书籍%或%服装, 我想知道%%的意义,因为它看起来是不必要的。
由于在C下面的程序,%%在printf中做了什么?
#include <stdio.h>
int main()
{
printf(" \"Books %% OR %% apparels\"");
getchar();
return 0;
}
该程序打印书籍%或%服装, 我想知道%%的意义,因为它看起来是不必要的。
%
指示用于格式化传递给printf()
的变量的格式转义序列。
所以你必须逃避它打印%
字符。
http://en.cppreference.com/w/c/io/fprintf
如果更换%%
到%
,这样
#include <stdio.h>
int main (int argc, char *argv[]) {
printf(" \"Books % OR % apparels\"");
return 0;
}
有两种转义序列printf()
:
"% O"
[guesswork]这不会产生一个有效的转义序列,因此printf()
忽视它并按原样打印它。
"% a"
printf()
将努力让从空参数列表float
并打印为“十六进制浮点,小写字母”(%a
,见上面的网页)。由于C调用惯例(免责声明:我不是这方面的专家),因此会使用内存中的一些垃圾并解释结果。
其实我的编译器(gcc 4.4.3)发出警告两个:
$ gcc a.c
a.c: In function ‘main’:
a.c:3: warning: unknown conversion type character ‘O’ in format
a.c:3: warning: too few arguments for format
我查过了,谢谢。 但是,我对此感到困惑: 如果我们用“%”替换“%%” 输出结果为“Books%or -0x1.a9288p-8pparels” 为什么这种行为? –
编译器无关与此有关。阅读'man printf'。 – bmargulies
尝试'man printf' –
这是一个转义序列。由于%在printf类型函数中具有特殊意义,为了打印文字%,您键入%%以防止它被解释为开始转换fmt。 – gnometorule