Menu Close

C语言格式说明符

格式说明符是用于格式化输入和输出函数的字符串。格式字符串决定输入和输出的格式。格式字符串总是以’%’字符开头。

% [flags][width][.precision][length]specifier

 

flags 含义
左对齐
+ 有符号值为正数时,则在值前面加上正号;若为负,则在值前面加上负号
space 有符号值为正数时,则在值前面显示空格;若为负,则在值前面加上负号
0 对于数值格式,使用0代替空格填充不足的字符;对于整数格式,如果使用了-标志或者指定精度,则该flag不起作用
# 把结果转换成另一种格式。
如果为%o,则以0开始;
如果为%x或%X,则以0x或0X开始;
对于所有浮点类型,强制保留小数点;
对于%g或%G格式,则使其包含尾随0
width 含义 .precision 含义
number 输出的最小长度(字符数) .number 输出的精度。
对于%e,%E和%f而言,表示小数点右边数字的位数
对于%g,%G而言,表示有效数字最大位数
对于%s而言,表示待打印字符的最大数量
对于整型,表示待打印数字的最小位数
单独使用.与.0的作用相同
* _number_的值由待打印项列表中对应的变量决定 .* _number_的值由待打印项列表中对应的变量决定

 

length和specifier组合,决定如何解释待打印列表中对应变量的数据类型,其组合关系如下表所示

length d i u o x X f F e E g G a A c s p n
(none) int unsigned int double int char* void* int*
hh signed char unsigned char signed char*
h short int unsigned short int short int*
l long int unsigned long int wint_t wchar_t* long int*
ll long long int unsigned long long int long long int*
j intmax_t uintmax_t intmax_t*
z size_t size_t size_t*
t ptrdiff_t ptrdiff_t ptrdiff_t*
L long double

注:

(1) intmax_t 和uintmax_t定义在stdint.h中,是128位的整数类型

(2) size_t定义在stddef.h中(stdio.h已经包含该头文件),是sizeof()的值的类型

(3) ptrdiff_t是表示两个指针差值的类型

specifier 用于 specifier 用于
i或d int a或A 十六进制浮点数
u unsigned int c char
o 无符号八进制整数 C ISO宽字符类型(wchar_t)
x或X 无符号十六进制整数(X使用大写) s char*字符串
f或F 浮点数类型(默认保留六位小数) p 指针(输出十六进制地址)
e或E 显示为科学计数法(保留六位小数) n 不输出任何字符,但是会将到该位置前输出的字符数存入后面对应的指针(默认为int*)所指的变量中
g或G 根据数值不同自动选择是否使用科学计数法表示(不含尾随0),长度更短者优先 % 输出字符’%’

scanf 的转换说明符

%[*][width][length]specifier

*和width 含义
* 跳过对应的输入项
(例如在语句scanf(“%*d %*d %d”,&n);中,仅将读取到的第三个整数存入变量n中,前两个值被忽略)
number 最大字符数。输入达到最大字符数或第一次遇到空白字符时将停止
length d i u o x f e g a c s [] [^] p n
(none) int* unsigned int* float* char* void** int*
hh signed char* unsigned char* signed char*
h short int* unsigned short int* short int*
l long int* unsigned long int* double* wchar_t* long int*
ll long long int* unsigned long long int* long long int*
j intmax_t* uintmax_t* intmax_t*
z size_t* size_t* size_t*
t ptrdiff_t* ptrdiff_t* ptrdiff_t*
L long double*
specifier 用于
i 把输入解释整数,自动识别进制(输入以0x开头则为十六进制,以0开头则为八进制,以1到9开头则为十进制)
d或u 把输入解释为十进制整数(d表示有符号,u表示无符号)
o 把输入解释为有符号八进制整数
x 把输入解释为有符号十六进制整数
s 字符串(从第一个非空白字符开始,到下一个空白字符之前的所有字符都是输入)
p 把输入解释成指针(地址)
a,e,f,g 把输入解释成浮点数(十进制或十六进制)
c 把输入解释成char字符(不忽略空白字符)
[chatacters]和[^characters] 扫描集,仅读取包含在[]中的字符,排除包含在[^]中的字符,在第一个不匹配于[]中字符(或匹配于[^]中字符)的位置停止,最终读入字符组成字符串,存入列表中对应的指针所指的连续内存空间中。
注意:仅适用于字符型变量

例1.

#include <stdio.h>
#include <stdlib.h>

int main(void){
   int a=15;
   float b=123.1234567;
   double c=12345678.1234567;
   char d='p';
   printf("a=%d\n", a);
   printf("a(%%d)=%d, a(%%5d)=%5d, a(%%o)=%o, a(%%x)=%x\n\n",a,a,a,a);        //%%可以输出%
   printf("a=%f\n", b);
   printf("b(%%f)=%f, b(%%lf)=%lf, b(%%5.4lf)=%5.4lf, b(%%e)=%e\n\n",b,b,b,b);
   printf("c=%f\n", c);
   printf("c(%%lf)=%lf, c(%%f)=%f, c(%%8.4lf)=%8.4lf\n\n",c,c,c);
   printf("d=%c\n", d);
   printf("d(%%c)=%c, d(%%8c)=%8c\n",d,d);
   system("pause");
}

Results:

a=15
a(%d)=15, a(%5d)= 15, a(%o)=17, a(%x)=f

a=123.123459
b(%f)=123.123459, b(%lf)=123.123459, b(%5.4lf)=123.1235, b(%e)=1.231235e+002

c=12345678.123457
c(%lf)=12345678.123457, c(%f)=12345678.123457, c(%8.4lf)=12345678.1235

d=p
d(%c)=p, d(%8c)= p

例2.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char c, s[20];
    int a=1234;
    float f=3.141592653589;
    double x=0.12345678912345678;
    strcpy(s, "Hello,World");
    c='\x41';
    printf("a=%d\n", a);        //按照十进制整数格式输出,显示 a=1234
    printf("a=%d%%\n", a);      //输出%号 结果 a=1234%
    printf("a=%6d\n", a);       //输出6位十进制整数 左边补空格,显示 a= 1234
    printf("a=%06d\n", a);      //输出6位十进制整数 左边补0,显示 a=001234
    printf("a=%2d\n", a);       //a超过2位,按实际输出 a=1234
    printf("a=%-6d\n", a);      //输出6位十进制整数 右边补空格,显示 a=1234
    printf("f=%f\n", f);        //浮点数有效数字是7位,结果 f=3.141593
    printf("f=6.4f\n", f);      //输出6列,小数点后4位,结果 f=3.1416
    printf("x=%lf\n", x);       //输出长浮点数 x=0.123457
    printf("x=%18.16lf\n", x);  //输出18列,小数点后16位,x=0.1234567891234567
    printf("c=%c\n", c);        //输出字符 c=A
    printf("c=%x\n", c);        //以十六进制输出字符的ASCII码 c=41
    printf("s[]=%s\n", s);      //输出数组字符串s[]=Hello,World
    printf("s[]=%6.9s\n", s);   //输出最多9个字符的字符串 s[]=Hello,Wor
    system("pause");
}

results:

a=1234
a=1234%
a= 1234
a=001234
a=1234
a=1234
f=3.141593
f=6.4f
x=0.123457
x=0.1234567891234568
c=A
c=41
s[]=Hello,World
s[]=Hello,Wor
Press any key to continue . . .
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts