printf的输出格式控制符、格式修饰符、转义字符
格式控制符:
%d
:用于输出十进制有符号整数。%u
:用于输出十进制无符号整数。%f
:用于输出十进制浮点数字。%e
或%E
:用于输出指数形式的浮点数。%g
或%G
:用于输出浮点数,根据数值大小自动选择使用%f
或%e
。%o
:用于输出无符号八进制。%x
或%X
:用于输出无符号十六进制。%c
:用于输出单个字符。%s
:用于输出字符串。%p
:用于输出指针地址。%lu
:用于输出无符号长整型。%lld
或%I64d
:用于输出有符号长长整型。%llu
或%I64u
:用于输出无符号长长整型。%Lf
:用于输出长双精度浮点数。-
%%
格式控制符:用来输出百分号%
,在输出时需要使用两个百分号连在一起。
格式修饰符:
-
:左对齐。+
:输出符号(正数前面加上“+”)。#
:八进制前缀(0)、十六进制前缀(0x 或 0X)或浮点数小数点(.)。0
:用 0 在左侧填充数据输出的空白,而不是默认的空格字符。m.n
:m
是指定的最小宽度,n
是指定的精度。*
:用来接收动态传入的宽度和精度。例如,%*.*f
表示输出浮点数,宽度和精度由后面带两个 int 类型的参数动态传入。
转义字符:
\a
:警报(响铃)。\b
:退格(回退)一格。\f
:换页。\n
:换行。\r
:回车。\t
:水平制表符。\v
:垂直制表符。\\
:反斜杠。\'
:单引号。\"
:双引号。\?
:问号。\0
:字符串结束标志。
C语言输出函数printf格式控制符的作用(基本用法)
%c 输出一个单一的字符
%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long(短整型、整型、长整型) 类型的整数
%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数
%ho、%o、%lo 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho、%#o、%#lo 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx、%x、%lx、%hX、%X、%lX
以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx、%#hX、%#X、%#lX
以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf 以十进制的形式输出 float、double 类型的小数
%e、%le 、%E、%lE 以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg、%G、%lG 以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%s 输出一个字符串
代码如下:
#include <stdio.h> int main() { int a = 10; int b = -10; float c = 6.6f; double d = 3.1415926; double e = 10.10; char f = 'a'; // 有符号整数(可以输出负数) printf("a = %d\n", a); // 10 printf("a = %i\n", a); // 10 // 无符号整数(不可以输出负数) printf("a = %u\n", a); // 10 printf("b = %u\n", b); // 429496786 // 无符号八进制整数(不可以输出负数) printf("a = %o\n", a); // 12 printf("b = %o\n", b); // 37777777766 // 无符号十六进制整数(不可以输出负数) printf("a = %x\n", a); // a printf("b = %x\n", b); // fffffff6 // 无符号十六进制整数(不可以输出负数) printf("a = %X\n", a); // A printf("b = %X\n", b); // FFFFFFF6 // 单、双精度浮点数(默认保留6位小数) printf("c = %f\n", c); // 6.600000 printf("d = %lf\n", d); // 3.141593 // 以指数形式输出单、双精度浮点数 printf("e = %e\n", e); // 1.010000e+001 printf("e = %E\n", e); // 1.010000E+001 // 以最短输出宽度,输出单、双精度浮点数 printf("e = %g\n", e); // 10.1 printf("e = %G\n", e); // 10.1 // 输出字符 printf("f = %c\n", f); // a return 0; }
C语言输出函数printf格式控制符的作用(进阶用法)
printf格式控制符完整格式:%[flag][width][.precision]type
(1)type如上所述;
(2)flag:标志字符,详情见下表:
flag 作用
- 表示左对齐。如果没有,就按照默认的对齐方式,默认一般为右对齐。
+ 用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。
空格 用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。
#
1)对于八进制(%o)和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是 0,十六进制的前缀是 0x / 0X。对于小数(%f / %e / %g)2)# 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上 # 以后,即使没有小数部分也会带上小数点。
(3)width表示宽度;
(4) .precision 表示输出精度,也就是小数的位数。
①当小数部分的位数大于 precision 时,会按照四舍五入的原则丢掉多余的数字;
②当小数部分的位数小于 precision 时,会在后面补 0。
此外,亦可用与字符串和整数:
①用于字符串时,.precision 表示最大输出宽度,或者说截取字符串。当字符串的长度大于 precision 时,会截掉多余的字符;当字符串的长度小于 precision 时,.precision 就不再起作用。
②用于整数时,.precision 表示最小输出宽度。与 width 不同的是,整数的宽度不足时会在左边补 0,而不是补空格。
部分用法示例
代码如下:
#include <stdio.h> int main(void) { int a = 10, b = 20, c = 30; printf("%5d,%5d,%5d\n",a,b,c); printf("%.5d,%.5d,%.5d\n", a, b, c); printf("%-5d,%-5d,%-5d\n\n", a, b, c); int d = 10; printf("%d,%+d\n",d,d); printf("% d\n\n",d); double e = 5.6789; printf("%.2lf\n",e); printf("%.10lf\n", e); printf("%.0lf\n", e); printf("%#.0lf\n\n", e); char f[10] = "abcdefghi"; printf("%.3s,%.7s\n", f, f); return 0; }
输出结果如下图:
代码演示:
#include <stdio.h> int main() { int a = 123; // 整型 unsigned int b = 456;// 无符号整型 double c = 1.23; // 浮点数 double d = 12345.678; // 指数形式浮点数 int e = 0x123; // 十六进制 char f = 'a'; // 字符 char g[] = "hello world"; // 字符串 int* h = &a; // 指针地址 unsigned long i = 1234567890ul;// 无符号长整型 long long j = -123450000000ll;// 有符号长长整型 long double l = 1.23;// 长双精度浮点数 unsigned long long k = 123450000000ull;// 无符号长长整型 int num = 123; double fnum = 3.14159; printf("%d\n", a); // 输出 123 printf("%u\n", b); // 输出 456 printf("%f\n", c); // 输出 1.230000 printf("%e\n", d); // 输出 1.234568e+04 printf("%x\n", e); // 输出 123 printf("%c\n", f); // 输出 a printf("%s\n", g); // 输出 hello world printf("%p\n", h); // 输出 a 的地址 printf("%lu\n", i); // 输出 1234567890 printf("%lld\n", j); // 输出 -123450000000 printf("%Lf\n", l); // 输出 1.230000 printf("%llu\n", k); // 输出 123450000000 printf("%%\n"); // 百分号转义输出 % // 格式修饰符 printf("%-5d\n", num); // 输出 123 (左对齐) printf("%+d\n", num); // 输出 +123(输出符号) printf("%#x\n", num); // 输出 0x7b(十六进制前缀) printf("%05d\n", num); // 输出 00123(用 0 左对齐填充) printf("%.2f\n", fnum); // 输出 3.14 (精度控制) printf("%*.*f\n", 8, 2, fnum); // 输出 3.14 (动态宽度和精度,从后面两个 int 参数中传入) // 转义字符 printf("hello\tworld\n"); // 输出 hello world return 0; }
输出结果如下图:
对于修饰符和格式控制符的使用,可以参考具体的 C 语言教程或参考手册,根据实际需要选择使用。同时,可以使用 printf 函数的返回值来判断是否输出成功。
scanf()输入十进制,八进制和十六进制值
scanf 输入十六进制
在这里,我们将声明一个无符号的char变量,并输入不同格式的值,例如十进制格式,八进制格式和十六进制格式。
-
输入和打印十进制值–我们使用“%d”格式说明符
-
输入和打印八进制值–我们使用“%o”格式说明符
-
输入和打印十六进制值–我们使用“%x”格式说明符
#include <stdio.h> int main(void) { //data range of unsigned char is in, //1) decimal format 0 to 255 //2) octal format 0 to 377 //3) hexadecimal format 0 to ff unsigned char var; printf("Enter decimal value b/w 0 to 255: "); scanf("%d", &var); printf("var = %d\n", var); printf("Enter octal value b/w 0 to 377: "); scanf("%o", &var); printf("var = %o\n", var); printf("Enter hexadecimal value b/w 0 to ff: "); scanf("%x", &var); printf("var = %x\n", var); return 0; }
输出量
Enter decimal value b/w 0 to 255: 198 var = 198 Enter octal value b/w 0 to 377: 172 var = 172 Enter hexadecimal value b/w 0 to ff: f9 var = f9