C语言printf() 详解之终极无惑
扫描二维码
随时随地手机看文章
来源:CSDN - 恋猫大鲤鱼
编译环境:Linux 环境以 g 4.4.6 编译成 64 位程序
1.printf() 简介
printf() 是 C 语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf() 申明于头文件 stdio.h。函数原型:int printf ( const char * format, ... );
返回值:正确返回输出的字符总数,错误返回负值。与此同时,输入输出流错误标志将被置值,可由指示器函数 ferror(FILE *stream) 来检查输入输出流的错误标志,如果 ferror() 返回一个非零值,表示出错。调用格式:
printf("格式化字符串", 输出表列)
格式化字符串包含三种对象,分别为:(1)字符串常量;
(2)格式控制字符串;
(3)转义字符。字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以 % 开头的字符串,在 % 后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。
2.格式控制字符串详解
printf() 的格式控制字符串组成如下:%[flags][width][.prec][length]type
分别为:%[标志][最小宽度][.精度][类型长度]类型。
2.1 类型(type)
首先说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。type 用于规定输出数据的类型,含义如下:字符 | 对应数据类型 | 含义 | 示例 |
---|---|---|---|
d/i | int | 输出十进制有符号 32bits 整数,i 是老式写法 | printf("%i",123); 输出123 |
o | unsigned int | 无符号8进制(octal)整数(不输出前缀0) | printf("0%o",123); 输出0173 |
u | unsigned int | 无符号10进制整数 | printf("%u",123); 输出123 |
x/X | unsigned int | 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x) | printf("0x%x 0x%X",123,123); 输出0x7b 0x7B |
f/lf | float(double) | 单精度浮点数用f,双精度浮点数用lf(printf可混用,但scanf不能混用) | printf("%.9f %.9lf",0.000000123,0.000000123); 输出0.000000123 0.000000123。注意指定精度,否则printf默认精确到小数点后六位 |
F | float(double) | 与f格式相同,只不过 infinity 和 nan 输出为大写形式。 | 例如printf("%f %F %f %F\n",INFINITY,INFINITY,NAN,NAN); 输出结果为inf INF nan NAN |
e/E | float(double) | 科学计数法,使用指数(Exponent)表示浮点数,此处"e"的大小写代表在输出时“e”的大小写 | printf("%e %E",0.000000123,0.000000123); 输出1.230000e-07 1.230000E-07 |
g | float(double) | 根据数值的长度,选择以最短的方式输出,%f或%e | printf("%g %g",0.000000123,0.123); 输出1.23e-07 0.123 |
G | float(double) | 根据数值的长度,选择以最短的方式输出,%f或%E | printf("%G %G",0.000000123,0.123); 输出1.23E-07 0.123 |
c | char | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 | printf("%c\n",64) 输出A |
s | char* | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘结尾) | printf("%s","测试test"); 输出:测试test |
S | wchar_t* | 宽字符串。输出字符串中的字符直至字符串中的空字符(宽字符串以两个空字符’\0‘结尾) | setlocale(LC_ALL,"zh_CN.UTF-8"); |
wchar_t wtest[]=L"测试Test";
printf("%S\n",wtest);
输出:测试test | | p | void* | 以16进制形式输出指针 |
printf("0x%p","lvlv");
输出:0x000000013FF73350 | | n | int* | 什么也不输出。%n对应的参数是一个指向signed int的指针,在此之前输出的字符数将存储到指针所指的位置 | int num=0;
printf("lvlv%n",